Back to Blog

ChatGPT Replaced GrokBot and a £19 a Month Analytics Connector From a Browser Tab

I've been using AI to build things for over a year now, pretty much since I started EF-Map. It's not often I'm pleasantly surprised any more. Well, that's not quite true. Opus 5.5 has been great, and Fable has been great. But those are the big jumps you hear about before they land. Every so often it's something smaller, a bit of friction that just isn't there any more, and you sit back and go, Christ, that was easy.

This was one of those, and it wasn't Claude. It was ChatGPT on the website, GPT-5.6 on high, in Work mode rather than a normal chat. That distinction matters because Work mode is the part that can actually go off and do things, and it uses up your plan's allowance while it does. I'm only on the basic Plus plan, the $20 a month one.

GrokBot and the morning briefing

For a while I was paying for SuperGrok Heavy, the $300 a month plan. It gave me loads of inference, which is where Don't Sleep on Grok 4.6 came from, and it came with GrokBot. I've since come back to Anthropic for a few reasons. Cursor massively cut the allowance for the other models I'd been using in there, Grok 4.7 wasn't the step up I'd been hoping for, and Opus 5.5 changed how I work anyway, which is its own article. The one thing I lost by cancelling was GrokBot.

I probably didn't use GrokBot to anything like its full potential. I used it for a daily briefing at around 7am. What's the state of world-contracts, the dev branch and the main branch, has anything moved, what's new and what does it mean for my tools. Is anything going on around EVE Frontier on X or Reddit that I should reply to. It also had me log into Google Search Console in its own cloud browser so it could summarise that as well. So basically all the things I'd normally check by hand in the morning, presented in one go.

Moderately useful. Not worth keeping a Grok subscription for on its own.

Asking ChatGPT, with low expectations

So I asked ChatGPT what I could replace GrokBot with. My expectations were low, because I still remember the GPT-4 days. You'd ask for something and it would say leave it with me, I'll get that for you, as if it was going to go away and come back later with a report or a spreadsheet. It didn't support anything like that. It just hallucinated that it would come back, and it never did.

This time it suggested itself. A scheduled task every morning at half six. It already had access to my GitHub repositories and it could do the other checks itself. For Google Analytics and Search Console it suggested an app called GSC Wizard, which I connected. That worked fine for about a week.

Then one morning the briefing told me my GSC Wizard trial had expired. Maybe I should have checked at the time, but I hadn't realised it was a trial. To carry on was £19 a month, £228 a year, for what is basically an interface between ChatGPT and Google's own APIs. That isn't worth it to me.

I wasn't looking forward to Google Cloud again

In a normal chat, which doesn't use the allowance, I asked whether there was an easier way.

I've done the Google side of this before. Back in January I set up GA4 and Search Console access so I could ask an agent in VS Code for a report on search and analytics, which I wrote up in Improving EF-Map Visibility. There was a lot of back and forth with the Google consoles. Setting up accounts, pasting email addresses into permission screens, putting environment variables into VS Code. Anybody who has used the Google consoles will know there are a lot of them, things move around all the time, and whatever instructions you find are probably out of date. It's a bit of a nightmare to navigate, especially when it's something you do once and then don't go back to for months.

ChatGPT suggested a different approach. A private GitHub repository with a scheduled GitHub Action that pulls the data from Google's official APIs every morning, writes it out as JSON, and commits it. The briefing then reads that JSON through the GitHub access it already has. No middleman.

I expected it to explain how to do that, or maybe write me a prompt to take into VS Code. I do everything in VS Code and I know what's possible in there, so that would have been my normal next step.

Instead I switched to Work mode and asked it to just do it. I told it I wanted the thing implemented and tested, not planned. It had to use the official Search Console and GA4 APIs for both ef-map.com and eo-map.com, keep a history, run before the 06:30 briefing and use the least access it could. No downloadable keys, no secrets committed anywhere. It had to prove it had real data from all four properties, two in Search Console and two in GA4, and only take GSC Wizard out of the briefing once the replacement was proven. All of that happened in one chat, and fairly quickly, with one proviso I'll come back to.

What it built

It checked my GitHub account first for anything suitable. There wasn't anything, so it created a new private repository called analytics-briefing-collector and wrote a Python collector into it. Separate pieces for signing in to Google, Search Console, GA4, working out the reporting dates, comparing this week against last week, building the report and validating it. Then a config file for the two sites, tests, a setup script for Google Cloud, the scheduled workflow and the docs. That's 25 files in all.

For Search Console it collects clicks, impressions, click-through rate and average position, the top queries and landing pages, the ones that moved most, daily history, and the last seven days against the seven before. It only asks Google for final data, so it isn't treating yesterday's half-finished numbers as real, and it records the date each set of data is settled through.

For GA4 it collects users, new users, sessions, engagement, page views, events and key events, plus top pages, landing pages, channels, sources, devices and countries. It deliberately stops two days back, because GA4 data can take 24 to 48 hours to settle.

It also filters each site to its exact hostname, ef-map.com and eo-map.com. I put up a lot of preview builds on Cloudflare, so that one matters to me. Previews and localhost testing don't get to inflate the numbers.

One command in Cloud Shell

This was the bit I was dreading.

Setting up Google API access normally means walking through page after page of Google Cloud. Turn on the APIs, create an identity, sort out the permissions, download a credentials file, then try to work out which of the permissions you actually needed. Instead ChatGPT wrote a script, scripts/bootstrap-gcp.sh, and gave me one command to run. I opened Google Cloud Shell, which is a terminal that lives inside the Google Cloud console, pasted it in, and ran it against a Google Cloud project I already had.

That was the main manual technical step.

The script turned on the four Google APIs it needed and created a dedicated account for the collector to act as, called frontier-analytics-reader. Google calls that a service account. Think of it as a robot user that only exists for this one job. Then it set up what Google calls Workload Identity Federation. In plain terms, Google Cloud is told to trust GitHub to vouch for one specific repository, on its main branch only, and nothing else. When the workflow runs, GitHub hands it a signed identity, Google checks it, and gives back a short-lived token for that run. At the end the script printed the two values GitHub would need, and the last line of output was this.

No service-account key was created.

The usual way of doing this is a downloaded key file, which is effectively a password that never expires, sitting wherever you saved it. Here there isn't one. There's no long-lived Google credential sitting in GitHub at all.

The service account was then given read-only access to the two Search Console properties and Viewer access on the two GA4 properties, and no broad data role on the Google Cloud project itself. ChatGPT then went into the live Google pages and checked the permissions were actually there, rather than assuming the setup had worked.

What I actually did by hand

It wasn't zero, to be fair.

The cloud browser had to be signed into Google and GitHub, and I did the logins when it asked. It needed signing in again at one point. And I ran that one command in Cloud Shell. Everything else was done in the chat itself, through its GitHub connection and the cloud browser.

On the GitHub side, ChatGPT saved two repository variables, the Workload Identity provider and the service account's address. Those are identifiers, not secrets. The workflow itself only gets two permissions, one to ask GitHub for that signed identity and one to commit the reports back into the repository.

The schedule

The collector is scheduled for 05:15 UK time. GitHub's schedules run on UTC though, and the clocks change twice a year, so it has two triggers, one for GMT and one for British Summer Time. Each run checks the London time first, and only the one that corresponds to 05:15 in London does any work. The other just exits. That leaves it over an hour to finish before the 06:30 briefing.

Every successful run writes reports/latest.json, a dated copy for that day, and reports/index.json. So the briefing always knows where today's report is, the dated files build up a history, and the index says which reports exist and what date each source is settled through.

It broke twice, and ChatGPT fixed it twice

It didn't work first time, which I think is actually the more interesting part.

The first run of the workflow failed because the test runner couldn't import the project's own code inside GitHub's environment. ChatGPT read the failure, changed the workflow to run the tests with python -m pytest, which sorts that out, pushed the fix and ran it again.

The second run got further. It signed in to Google, pulled the analytics and validated the report. But it didn't commit anything. The step that decides whether there's anything to commit used git diff --quiet, which only notices changes to files git already knows about. On the very first run every report is a brand new file, so as far as that check was concerned nothing had changed. ChatGPT spotted that, switched the check to git status --porcelain -- reports/, which does see new files, pushed again and ran it a third time.

The third run went through in 26 seconds. Tests, keyless sign-in to Google, Search Console data, GA4 data, reports generated and validated, then committed back to the repository by the workflow itself. Three attempts, and I didn't touch any of them.

Then it checked its own work. Nine tests passing, compile checks, the report validated against its schema, a scan of the repository for secrets, and a clean working tree. The bit I liked most is that it then fetched the committed JSON back through its GitHub connector, the same way the morning briefing will. I liked that, because a green workflow on its own doesn't prove much.

Four and a half hours to write a closeout

Now, the proviso. Partway through all this it stopped, because it had hit the five-hour usage limit on my Plus plan. That was GPT-5.6 on high, which isn't even their newest model. So I think for anything serious, the Plus allowance goes quickly.

I had to wait about four and a half hours for it to reset. When it did I just hit continue in the same chat, and it turned out it was literally about two minutes from finished. All it had left was writing the closeout.

The first real report

The first collection ran on 19 October, using data settled through 17 October. For the latest seven days it came back with this.

Last 7 daysEF-MapEO-Map
Search clicks146 (down 14.6%)37 (up 131%)
Search impressions5,068 (up 5.7%)392 (up 4.8%)
Click-through rate2.88%9.44%
Average position7.578.23
GA4 users231328
GA4 sessions1,028570
GA4 page views5,6973,123
Engaged sessions715 (69.6%)399 (70%)

EO-Map's search clicks more than doubling sounds a lot more dramatic until you see it's 37 against 16. There was plenty more in there as well, the actual search queries, top pages, traffic sources, landing pages, events and day by day comparisons for both sites.

Plugging it into the briefing

Only once real, valid data had been committed did ChatGPT touch the morning briefing. It's still scheduled for 06:30, and everything else it did before is still there. It watches my repos for EF-Map, EO-Map, RootFit, CivilizationControl and the overlay, and looks at world-contracts dev separately from main to work out what upstream changes would mean for my tools. It checks the public EVE Frontier sources too, and looks for Reddit and X posts worth a reply. All of it is meant to stay short. Things that changed, or need attention. I'd left Cloudflare out of it on purpose, because the Google data covers most of what I need at the moment.

The analytics section now reads from the collector repository and nothing else. It's told to check that latest.json exists and parses, that the schema version is right, that the latest workflow run passed where it can see it, and that the hostname filters are in place. It has to respect the settled-through dates and compare against previous reports. If the collector has failed, the briefing says the analytics are stale or blocked. It doesn't guess, and it doesn't quietly fall back to GSC Wizard. GSC Wizard isn't in the briefing any more.

What it costs

The Search Console API is free, within its quotas. The GA4 Data API has quotas too, and this makes a handful of requests a day against two standard GA4 properties. Nothing runs on paid Google Cloud compute, databases or storage.

GitHub Actions minutes on a private repository come out of the account's allowance. With two triggers a day, and GitHub rounding every job up to a whole minute, that's roughly 60 minutes a month. GitHub Free includes 2,000 a month for private repositories, and Pro includes 3,000. So I think the honest way to put it is that this costs nothing as long as the account stays inside its normal GitHub allowance. It could still cost something if the account went over, but this on its own won't get anywhere near that. That's against £19 a month for GSC Wizard, and I was already paying for ChatGPT Plus.

What actually surprised me

It isn't that an LLM wrote some Python. They've been doing that for me for over a year.

It's that I'd stopped paying attention to what the ChatGPT website could do. I do everything in VS Code, so that's where I think of agents as living. The scheduled tasks and the cloud browser already make it look a lot like GrokBot, but I hadn't realised it could go from a browser tab to a working repository, debug its own workflow, and then rewire the briefing that depends on it. Not long ago I'd have expected an explanation or a prompt to take somewhere else. This time it did the job.

It wasn't one click. It needed signing in more than once, Google still needed a human to authorise access and run the Cloud Shell command, the workflow had two bugs before it worked, and it hit the allowance wall with two minutes to go. So easy probably isn't quite the right word, despite what I said at the start, because underneath it's still Google Cloud permissions and GitHub Actions. What changed is that I didn't have to work through any of that myself. I didn't design the permissions, I didn't write the API code, I didn't debug the Actions, and I didn't wire it into the briefing.

I think the website has gone past answering questions. This time it was more like having a systems assistant, and I was only needed at the points where somebody with the authority actually had to say yes, which was signing in and running the one command that touches Google Cloud. Everything else, it just got on with.

The first scheduled run is tomorrow at 05:15, so the 06:30 briefing should be the first one with the new numbers in it. I'm waiting on that with bated breath. If it falls over I'll update this.

Related Posts

Opus 5.5 Changed How I Use AI Agents, and My Logs Back It Up is why I came back to Anthropic, and how I work with agents now.

Don't Sleep on Grok 4.6: What My Own Testing Found is the Grok stretch this article starts at the end of.

Improving EF-Map Visibility: Analytics, SEO, and AI Integration is the January setup, the slow way, in VS Code.

Audit, Chunk, Implement: The AI Workflow Behind EF-Map is the ChatGPT and VS Code loop I used for most of this year.

chatgpt work grokbot alternative chatgpt scheduled tasks google search console api ga4 data api github actions workload identity federation ef-map