At a glance
This one is not a client project and not a product you can sign up for. It runs for my own sites and a handful of people close to me, and it exists because the alternative was paying a monthly subscription for numbers Google already gives away.
The problem
Search visibility fails slowly and quietly. A backlink you paid for or earned goes dead when someone redesigns their site. A page drops out of the index after a template change. Your average position slides two places a week for a month, which is nothing on any given day and a lot by the end. Core Web Vitals degrade because a plugin update shipped a heavier script.
None of that announces itself. You notice when traffic is already down and then spend an afternoon working out when it started — and usually you cannot, because nobody was writing the numbers down.
Commercial tools solve this and charge per month per project for it. That is fair for an agency running fifty clients. It is a poor deal when you want to watch a handful of your own sites and the underlying data is free.
What it watches
- Backlinks, and whether they are still alive Each link is re-crawled on its own schedule: HTTP status, anchor text, rel attribute, and whether the linking page is still indexed. A 0–100 quality score folds those signals into one number.
- Search Console performance Clicks, impressions, CTR and average position pulled daily and stored as history — by page, query, device and country, so a drop can be dated rather than guessed at.
- Keyword positions Tracked keywords get a daily position from Search Console rather than a scraper, with a 30-day trend and the clicks and impressions behind each one.
- Core Web Vitals, twice over PageSpeed Insights for lab data and the Chrome UX Report for what real visitors actually experienced — mobile and desktop, tracked over time instead of checked once.
- Index status and sitemaps URL Inspection says whether Google has the page. The sitemap monitor parses robots.txt and sitemap.xml, follows sitemap indexes, and flags pages that are indexed but missing from the sitemap.
- Alerts, not dashboards to remember to open A lost backlink, an average position down more than three places week over week, a page that stops passing inspection, Core Web Vitals crossing into poor — each raises an alert with a severity.

The interesting part: it all runs on free quotas
The reason a tool like this can exist without a subscription is that Google publishes the data through its own APIs, at no cost, to anyone willing to build the plumbing.
Those numbers are the whole design constraint. They are generous enough that the system would carry roughly 1 500 projects before Search Console became the limit — which is far more than it will ever need, and the reason nothing here is rationed or paywalled internally.
What you do not get for free is the part that makes it useful: something that calls those APIs on a schedule, keeps the answers, compares today against last week, and tells you when the comparison is bad. That is the product.

How it stays current
- Job 1
Backlinks — every minute
Not every link every minute: the runner picks up whichever links are due for a re-check, so crawling spreads out instead of arriving as one daily spike.
- Job 2
Search Console — daily, 05:00
Yesterday’s performance and the tracked keywords, written into history tables the charts read from.
- Job 3
Index status — daily, 06:00
URL Inspection across the top pages, capped per run so the daily quota is never the thing that breaks.
- Job 4
Core Web Vitals — Mondays
PageSpeed Insights, then the Chrome UX Report half an hour later. Weekly, because field data moves on a 28-day window and daily polling would tell you nothing new.
- Job 5
Sitemaps — Mondays, 08:00
Re-parse, re-compare against what is indexed, and surface the difference.
Everything heavier than a single HTTP call goes through a queue rather than the scheduler itself, so a slow crawl or a rate-limited API never holds up the rest of the run.

My role
All of it. The project is mine end to end: the data model — twenty-five tables, most of them history rather than current state — the OAuth flow against Search Console, the three Google API clients, the scheduler and queue workers, the Filament panel, the charts and the alerting rules. Ninety-eight commits over about three and a half weeks in April 2026.
Result
- Drops can be dated Because the numbers are written down daily, "when did this start" has an answer instead of a guess.
- No subscription The data was always free; what was missing was something to collect it. Running cost is a small server and nothing else.
- Alerts that fire — and need tuning Lost links and slipping positions raise alerts rather than waiting to be noticed. Four thousand of them are currently unread, which is its own lesson: an alert nobody can act on is noise, and the thresholds are the unfinished part.

Technologies
Laravel
The application, the scheduler and the queue workers that do every piece of work heavier than one HTTP call.
Filament
The admin layer: tables, filters, charts and the alert views, so the interface followed the data model instead of being built twice.
MySQL
Twenty-five tables, most of them daily history — the part that turns a live reading into a trend.
Google Search Console API
OAuth per user, Search Analytics for performance and positions, URL Inspection for index status.
PageSpeed Insights & CrUX
Lab and field Core Web Vitals, mobile and desktop, kept over time rather than sampled once.




