v0.1.0 First release · open source

Your search data,
kept.

Self-hosted SEO & GEO analytics in your own Cloudflare account. See what AI crawls, cites and clicks, keep your history forever, and ask it over MCP.

  • One Worker + D1
  • No telemetry
  • Behind Cloudflare Access
  • MIT licensed

Built on data you already own

  • Google Search Console
  • Bing Webmaster Tools
  • Cloudflare AI crawlers
  • Cloudflare Web Analytics
  • Claude
  • Cursor
  • ChatGPT
The GEO funnel

Crawled. Cited. Clicked.

Per page: fetched by GPTBot, ClaudeBot and PerplexityBot, cited in AI answers, clicked from ChatGPT, Perplexity and Copilot.

  1. Crawled

    412 pages
    Cloudflare AI crawlers
  2. Cited

    96 pages 23%
    Bing AI Performance
  3. Clicked

    38 pages 40%
    Web Analytics · GSC · Bing

Figures are illustrative. Cited comes from Bing AI Performance, imported as CSV.

Crawled, not cited

AI reads it, then ignores it.

316 pages stall here
Cited, not clicked

You’re the source, not the destination.

58 pages stall here
MCP server

Ask, don’t dig.

Twelve read-only MCP tools answer from your own data, so your assistant does the digging.

https://your-domain/mcpClaude · Claude Code · Cursor · ChatGPT

13 tools 12 read-only · 1 opt-in write
Search
  • query_performance
  • compare_periods
Opportunities
  • find_quick_wins
  • find_cannibalization
  • find_ctr_anomalies
  • find_content_decay
AI & GEO
  • geo_funnel
  • ai_crawlers
Site
  • inspect_url
  • list_sitemaps
  • submit_sitemap write · off
Setup
  • list_sites
  • setup_status

Called in the chat

Tool reference
Dashboard

Or just look.

A fast dashboard on the same Worker, running the same analysis as the MCP tools.

  • Overview
  • GEO funnel
  • AI crawlers & referrals
  • Performance & compare
  • Opportunities
  • Technical
The Searchkeep dashboard overview: Search Console and Bing totals, daily search performance, the GEO funnel and AI crawlers.
Long-term history

Keep your history forever.

Search Console keeps 16 months. Searchkeep backfills them, then keeps every day in D1.

Search Console
16 months
Searchkeep, two years in
40 months, and counting
Dropped by Google after 16 months Backfilled after you deploy Synced daily, never deleted
Data sources

First-party data only.

The Google Search Console, Bing Webmaster Tools and Cloudflare APIs you already have, synced into a D1 database you own.

  • Google Search Console

    • Search Analytics
    • Sitemaps
    • URL Inspection
  • Bing Webmaster Tools

    • Search traffic
    • Crawl issues
    • AI citations (CSV)
  • Cloudflare

    • AI crawler requests
    • Web Analytics
    • Core Web Vitals
Your Cloudflare account

D1

Syncs every 15 min
Kept forever
Data sources
Ownership

One Worker. Your account.

MCP, the dashboard and the sync share one Cloudflare Worker and one D1 database. No Searchkeep server.

  • Your data never leaves your account

  • Read-only by default

  • Free-tier friendly

  • Upgrade = Sync fork

How it fits together
Security

Locked until it’s safe.

Cloudflare Access in front, its JWT checked on every request, and no data until the setup is secure.

  1. A request

    MCP client or browser
  2. Cloudflare Access

    Sign-in · Managed OAuth for MCP
  3. JWT re-verified

    On every request
  4. Setup checks

    Locks again if one breaks
  5. Your data

    Dashboard, MCP and sync
  1. no_access
  2. oauth_disabled
  3. policy_too_broad
  4. ready
  5. Nothing is served or synced until ready.
Deploy with an agent

Hand the runbook to your agent.

An idempotent deploy guide an agent with GitHub and Cloudflare MCP can follow, stopping when you must click.

Paste into your agent GitHub accessCloudflare access Required
Deploy Searchkeep to my Cloudflare account by following docs/deploy.md in the GitHub repository noobnooc/searchkeep.
Comparison

Honest about what it isn’t.

Your own data for your own sites. For backlinks, competitor research or rank tracking, keep a SaaS tool.

Searchkeep compared with typical SaaS SEO tools
CapabilitySearchkeepTypical SaaS SEO tool
Where your data livesYour Cloudflare accountThe vendor’s servers
PriceFree, MIT licensedMonthly subscription
History past GSC’s 16 monthsKept in D1, foreverVaries; often only while subscribed
AI crawled → cited → clicked, per pageBuilt inRare
Ask from Claude, Cursor, ChatGPT12 read-only MCP toolsSometimes
TelemetryNoneUsually
Backlink indexNo, by designYes
Competitor researchNo, by designYes
Rank tracking (SERP scraping)No, by designYes
FAQ

Questions, answered.

All questions

What is Searchkeep?

Searchkeep is open-source SEO and GEO (generative engine optimization) analytics that you deploy to your own Cloudflare account. It keeps syncing Google Search Console, Bing Webmaster Tools and Cloudflare data into a D1 database, then lets you explore it in a dashboard or ask about it from any MCP client such as Claude, Cursor or ChatGPT.

How much does it cost?

Searchkeep is free and MIT licensed. You pay only for the Cloudflare resources it uses: one Worker, one D1 database and a cron trigger, which fit within Cloudflare’s free plans for typical sites. The history backfill is paced to stay under D1’s free limit of 100,000 rows written per day. Cloudflare Access is part of Zero Trust, which has a free plan for small teams.

Does my data leave my Cloudflare account?

No. Searchkeep has no backend of its own and sends no telemetry. Data flows from Google, Bing and Cloudflare APIs into your D1 database and is served only to you, through Cloudflare Access. When you ask a question over MCP, the tool results go to the AI client you chose to connect, just like any other MCP server.

What is the GEO funnel?

It follows each page through three steps of AI visibility: Crawled (AI crawlers fetched it, from Cloudflare), Cited (an AI answer referenced it, from the Bing AI Performance report, which has no API yet, so you import its CSV export from the dashboard) and Clicked (people arrived from an AI assistant, from Web Analytics referrers, alongside classic GSC and Bing clicks). Gaps between steps tell you what to fix.

How far back does the history go?

After you deploy, Searchkeep backfills as much as Google provides, which is 16 months, one day at a time. On the free D1 write quota the full backfill takes days to weeks. It never deletes anything, so your history keeps growing past the point where Search Console forgets it. The earlier you deploy, the more you keep.

Why no backlinks, competitor data or rank tracking?

By design. Searchkeep only uses first-party data you already have access to for sites you own. Backlink indexes and rank trackers depend on large-scale crawling or SERP scraping, which needs a vendor and is outside the project’s charter. Pair Searchkeep with a dedicated tool if you need them.

Do I need a paid Cloudflare plan?

No. AI crawler data requires the site to be proxied through Cloudflare (orange-clouded), which works on the free plan; Searchkeep identifies crawlers by user agent. AI referrals come from Web Analytics referrer hosts. Workers Free allows 10 ms of CPU per invocation, so the sync works in small batches; if sync units keep getting skipped, lower GSC_ROWS_PER_DAY or move to Workers Paid.

Can an AI agent deploy it for me?

Yes. The deploy guide is written as an idempotent runbook with a verification for every step. An agent with GitHub and Cloudflare MCP access can fork the repo, create the Worker, configure Access and set Secrets. A few steps need a human: authorizing the Cloudflare GitHub App, creating the Zero Trust organization, adding the service account in Search Console, generating the Bing API key and signing in through Access.

Which AI clients can connect?

Any MCP client that supports Streamable HTTP with OAuth, including Claude, Claude Code, Cursor and ChatGPT. Cloudflare Access acts as the OAuth server with dynamic client registration and PKCE, so there is no client ID to paste: the client opens a browser, you sign in, and it is connected.

How do I upgrade?

Open your fork on GitHub and click “Sync fork”. Workers Builds notices the new commit, builds and deploys, and the Worker applies any new D1 migrations itself on its next request. Your configuration lives in Worker Secrets, never in the repo, so upstream changes do not conflict with it.

Start keeping your search data today.

Deploys in 30–45 minutes.