yaojingang/GEOInflow

Data

Self-hosted analytics that combines site visitors, AI search referrals and server crawl logs so teams can see which AI crawlers reach which pages.

206
33
TypeScript
MIT
new today

GEOInflow is worth a look if your team is being asked "are AI crawlers finding our content?" and the honest answer is that nobody knows. It is a self-hosted analytics stack that puts browser tracking, AI referral data and server/CDN crawl logs in one place. Expect a full stack to run and some limits on what crawl data can actually prove.

The problem

A content or marketing team wants to know whether AI search products are reading and citing their pages. Today that question usually gets answered by cobbling together a general web analytics dashboard for traffic, a separate log search for bot user agents, and a spreadsheet of URLs someone maintains by hand. None of these share a definition of what counts as an AI visit, so the numbers cannot be compared. GEOInflow changes that middle step: crawl logs, referrals and a content inventory are imported into one database and viewed under the same filters. The result is a per-page view of observed AI crawler activity next to actual referred sessions and conversions.

What's different

The distinguishing mechanism is the crawler catalog. It keeps platform, product and request identity separate, and tags purpose separately from product type: training, AI search and user-triggered requests are different things, and an AI workbench or personal agent is a product category rather than a purpose. That matters because "OpenAI visited us" is a much weaker claim than "this specific request path was associated with search, not training." Filters are applied before aggregation and pagination, so cards, tables, exports and comparisons use the same conditions.

The price of that structure is administrivia. The catalog has active entries only when an administrator publishes them, and each site's configuration affects what is shown. Purpose labels and path observations carry "inferred" or estimate markers rather than being facts. The README is also pointed about evidence boundaries: crawl logs establish observed access only; indexing, training, answer citations, recommendation ranking and acquisition each need their own evidence crawler analytics guide. Budget time for interpretation, not just installation.

Who should try it

Good fit: a publisher, content team or agency running several sites that already has server or CDN logs and wants a self-hosted, MIT-licensed place to compare crawl coverage with referral and conversion data. A team that can name an owner for the crawler catalog and already works with PostgreSQL and Redis gets the most out of it.

Poor fit: a small site that only wants page views. The setup brings up the app, a log worker, an analytics worker, PostgreSQL and Redis deployment instructions, and the GEO value depends on having logs and a content inventory to import. Anyone expecting it to report whether AI answers cite them should read the limitations first; it does not claim to observe citations or model training. If Cloudflare access controls are wanted, that path requires separate Zone credentials and a preview/confirm step, with provider plan and field availability checked in the deployed environment.

Requirements and limitations

The documented quick start is a shell script run from the project root with Docker Engine/Desktop and Compose V2, generating a private .env and random secrets, building the image, running migrations and starting five services on port 3002 quick start. Ongoing work is real: keeping the crawler catalog current as providers change request identities, importing content inventories, reviewing logs and handling access issues inside the tool.

Two boundaries shape expectations. First, separate measurement streams: crawler requests, referral sessions and conversions are measured independently, and cross-source associations keep comparability limits rather than being merged into one number. Second, identity is not proof: a matching user agent identifies a request as matching a known entry, not that the operator verified the source. Browser tracking is script-based, so blocked scripts and consent choices reduce referral coverage. Geographic resolution depends on the bundled DB-IP City Lite dataset or a supplied database under its own terms third-party notices.

HotRepo's take

On the NEW-REPOSITORY board (新项目榜, TypeScript), GEOInflow was observed at #4 with 206 total stars on 2026-10-26; that is a dated snapshot of a new-repository board, not a daily growth measurement, and HotRepo has no comparable daily history. The repository is young, and persistence cannot yet be judged. Before investing, check how the crawler catalog and estimate labels are maintained in the project's architecture documentation, since that upkeep determines whether the dashboards stay trustworthy.

Written by AI from the project's README, updated October 26, 2026. The project's own docs are the source of truth.