What GEOInflow does
GEOInflow is a self-hosted analytics platform for Generative Engine Optimization, or GEO. It combines browser activity, AI search referrals, server or CDN crawl logs, and content inventories within a shared website context.
The platform helps answer practical questions: Which AI crawlers visit your site? Which paths do they request? Are requests succeeding? Which important pages have no observed crawl activity? How much visitor traffic and how many conversions arrive through supported AI search referrals?
GEOInflow is suitable for company websites, media publishers, content sites, developer documentation, and teams managing multiple websites. Application source code is released under the MIT license. The README describes product version v1.2 and build version 1.2.0.
Crawl logs demonstrate observed access. They do not, by themselves, prove indexing, model training, answer citations, recommendation rankings, or customer acquisition.
Key capabilities
AI crawler identity and purpose
The built-in catalog covers providers including OpenAI, Anthropic, Perplexity, Google, Microsoft, ByteDance, Baidu, Kimi, and Tencent Hunyuan. It also retains observations of traditional search crawlers and other bots.
Platforms, products, request identities, purposes, and product types are represented separately. This allows the system to distinguish concepts such as training, AI search, user-triggered access, AI workbenches, and personal agents without treating them as mutually exclusive.
Identity evidence is also kept separate. A declared User-Agent can be compared with official IP ranges and available DNS or trusted-edge evidence. A User-Agent claim alone is not considered confirmation, and historical records without sufficient evidence remain marked as unknown.
Crawl activity and content coverage
You can review requested-page rankings, repeated requests, observed pages, directory distribution, leading crawlers, recent activity, and content freshness. Importing a sitemap, CSV file, or JSON inventory supplies a known set of pages that can be compared with observed crawl logs.
This comparison reveals pages with observed access as well as potential AI blind spots. Filters for identity, purpose, and product type are applied before aggregation and pagination, so cards, tables, comparisons, and exports use consistent conditions.
Request diagnostics and access policies
GEOInflow presents HTTP responses, methods such as GET and HEAD, cache behavior, latency, response size, collection continuity, and risk findings as separate evidence. Teams can add handling states and notes, defer investigations, and resume them later.
The platform can export robots and Nginx access configurations. Supported Cloudflare controls require separate Zone credentials, a preview, explicit confirmation, background execution, and verification of the resulting remote state. Available controls depend on the deployed environment, provider plan, and granted permissions.
Website and conversion analytics
- Pageviews, visitors, visits, referrals, geography, devices, browsers, and content performance
- Custom events, goals, funnels, visitor paths, attribution, and revenue analysis
- Search engines, referral keywords, UTM analysis, performance, heatmaps, retention, and audiences
- Website, team, workspace, dashboard, permission, and public-sharing tools
- CSV, JSON, and ZIP exports for the selected scope
- Optional AI assistance based on website facts, disabled by default
Browser tracking recognizes supported AI search referrals and connects them with landing pages, events, goals, and conversions. Crawler requests, referral sessions, and conversions remain distinct measurements, and cross-source comparisons retain their limitations.
Understand the data flow
GEOInflow accepts three principal types of input:
- Browser tracking: Collects pageviews, events, and any enabled extended browser data.
- Server or CDN logs: Captures crawler requests that do not execute browser scripts.
- Content inventories: Imports sitemap, CSV, or JSON records to define the pages that should be evaluated for coverage.
Application and ingestion APIs write data to PostgreSQL. Log and analytics workers process the records, while Redis supports cached reporting. Reports and published results then power GEO, visitor, and content analytics as well as permission-controlled sharing and exports.
Each source can be connected independently. If a source is absent, the corresponding analysis should display that limitation rather than silently treating missing input as a negative result.
Prerequisites for the quick deployment
Before starting, install and run Docker Engine or Docker Desktop with Docker Compose V2. Confirm that the machine can reach the image and dependency download sources required during the build.
Obtain the GEOInflow source code, open a terminal, and change to the repository root. Production installations additionally require a domain, HTTPS, and a trusted reverse proxy.
Deploy GEOInflow with Docker
Run the deployment script
From the project root, execute:
sh scripts/liekan-deploy.shThe script creates a private .env file and random secrets, builds the application image, applies migrations, and starts the following components:
- The GEOInflow application
- The log worker
- The analytics worker
- PostgreSQL
- Redis
Open the application
The default local address is:
http://127.0.0.1:3002For a fresh installation, sign in with the initial credentials:
- Username:
admin - Password:
liekan
Change the initial password immediately after signing in. Future upgrades preserve customized accounts and passwords.
Load the bundled example
To explore the interface before connecting a live website, seed the included processed dataset:
docker compose -f docker-compose.liekan.yml exec app node scripts/liekan-seed-demo.mjsThe example website is named 猎看官网(示例数据). On its first import, timestamps are shifted to make the dataset convenient to inspect. Repeated runs preserve existing data and deletion state.
Connect your first website
After securing the administrator account, create a website in GEOInflow and connect the data sources appropriate to your deployment. Consult the project’s quick-start guide for the exact ingestion workflow.
Step 1: Add browser tracking
Install the browser tracking script to collect pageviews, events, and enabled extended measurements. Tracking is cookieless by default. Recording, event properties, and business integrations depend on the data scope configured by the operator.
Browser pageview collection can continue without trusted IP ingress. However, identity-sensitive metrics such as unique visitors require reliable ingress evidence, so configure the reverse proxy carefully in production.
Step 2: Connect server or CDN logs
Browser scripts cannot observe bots that only request documents from the server. Add server or CDN logs to measure crawler access, request paths, response codes, methods, latency, caching, and failures.
Automatic server collection requires public HTTPS, an ingestion secret, and signed installation assets. If you use Cloudflare integration, you also need OAuth, appropriate permissions, and provider support for the requested capabilities.
Step 3: Import a content inventory
Import a sitemap, CSV file, or JSON inventory containing the pages you expect crawlers to discover. GEOInflow can compare this known inventory with observed log records to calculate crawl coverage and identify pages without observed activity.
Treat an uncovered page as an investigation lead rather than proof of exclusion. Check entry points, internal links, robots directives, HTTP responses, and whether log collection covered the relevant period.
Basic analysis workflow
Find which AI platforms visit the site
- Select the website and a date range.
- Open the crawler analytics area.
- Review crawler identity, provider, purpose, request volume, verification status, and trends.
- Use identity, purpose, and product-type filters to narrow the dataset.
- Inspect the evidence supporting each identity instead of relying only on its User-Agent.
This workflow helps distinguish training crawlers, AI search requests, and user-triggered access where the available catalog and evidence support that classification.
Identify heavily crawled and potentially invalid paths
- Review requested-page rankings and repeated requests.
- Compare activity by directory and crawler.
- Inspect recent activity and content freshness.
- Look for malformed, obsolete, or unexpectedly frequent URLs.
- Check their HTTP status, cache behavior, latency, and response size.
Repeated requests can reveal important content, inefficient crawler behavior, redirects, missing pages, or structural issues. Interpret each pattern alongside response evidence.
Measure content coverage
- Import the current content inventory.
- Select a consistent website, date range, and crawler filter.
- Compare inventory pages with paths observed in logs.
- Review pages with no observed access.
- Investigate discoverability, policies, responses, and source continuity.
Cards, tables, comparisons, and exports share the selected filter conditions. Inferred path observations and estimated results retain their labels, helping users distinguish calculated conclusions from direct evidence.
Analyze AI referral outcomes
- Enable browser tracking for the website.
- Review recognized AI referral sessions and landing pages.
- Define relevant events, goals, or conversions.
- Compare referral traffic with downstream outcomes.
- Keep crawler requests and referral sessions separate when reporting results.
A crawler request does not establish that a page appeared in an AI answer. Likewise, an AI referral session does not establish how a model selected or cited the page. Preserve these distinctions in dashboards and exported reports.
Date ranges, timezones, and refresh behavior
The primary date ranges are Today, 7 days, and 30 days. The default analytics timezone is Asia/Shanghai. During the first complete sign-in, the application confirms the country and city timezone. Later requests use the account’s saved timezone to define today.
Realtime visitors cover the most recent 30 minutes. Retention analysis uses calendar months. Main Today dashboards read published results every 30 seconds and display the actual data cutoff. Refreshing pauses when the page is hidden or offline, while realtime and heavier analyses use their own update schedules.
Advanced operating tips
Inspect analytics acceleration
GEOInflow uses pre-aggregation, exact visit facts, durable results, and multiple persistence layers to reduce repeated calculations. Common ranges can be prewarmed, and published results remain available while background updates run.
After deployment, use the Analytics Acceleration page to inspect tasks and coverage. Initial calculations, cache hits, and background updates have different costs. Actual performance depends on data volume, inventory construction, PostgreSQL performance, and cache state.
Keep workers healthy
The log and analytics workers are essential for processing ingestion and publishing results. If reports stop updating, check worker status, queues, source continuity, database health, and Redis before interpreting an empty dashboard as a lack of activity.
Capacity safeguards may evict older windows, and idle failed tasks can pause automatic retries. Durable background tasks allow initial calculations to complete without requiring a browser session to remain open.
Preserve source and evidence boundaries
- Do not treat a User-Agent claim as verified crawler identity.
- Do not treat missing log activity as proof that a crawler never accessed a page unless collection coverage is complete.
- Do not equate crawler access with indexing, training, citation, ranking, or acquisition.
- Keep missing integrations, empty datasets, unknown values, estimates, and unsupported capabilities as distinct states.
- Compare results only when their date ranges, source coverage, filters, and rule versions are compatible.
Use access controls carefully
Preview generated robots, Nginx, or supported Cloudflare changes before applying them. Cloudflare operations require explicit confirmation and should be followed by a read-back of the remote state. Verify the provider plan and permissions in the actual deployed environment.
Plan production infrastructure
Use a domain, HTTPS, and a trusted reverse proxy for production access. Back up PostgreSQL and protect the private .env, ingestion secrets, account credentials, private keys, and any privately supplied geographic database. Review the deployment guide for proxy, backup, service, configuration, and upgrade details.
Enable AI features only when needed
Core website analytics and crawler identification do not require a model API key. AI analysis is disabled by default. When enabling it, users select model connections and website materials, so review what data is sent to the chosen model provider.
Interpret GEO Weight cautiously
GEO Weight is a Beta capability based on qualified AI content access from the most recent 30 complete calendar days. Use its documented formula, evidence, applicable scope, and limitations rather than treating it as a universal ranking score.
Development setup
Contributors need Node.js 22.23.4, pnpm 12.3.4, PostgreSQL, an independent development database, and private environment configuration. The following sequence prepares and starts the web application on port 3302:
pnpm install --frozen-lockfile
pnpm build:db
pnpm db:migrate
pnpm liekan:migrate
pnpm liekan:queue-bootstrap
pnpm build:openapi
pnpm build:packages
pnpm build:tracker
pnpm build:recorder
pnpm liekan:build-worker
pnpm dev --port 3302Start the log and analytics workers in separate terminals as described in CONTRIBUTING.md. The development workers and web application must use the same private environment configuration.
Product pages are located in src/components/liekan, data contracts in src/lib/liekan/contracts, and upstream query and permission adapters in src/lib/liekan/upstream. Add schema changes through incremental project migrations, and do not modify migrations that have already been applied.
Conclusion
GEOInflow provides a self-hosted way to combine crawler evidence, content inventories, visitor analytics, AI referrals, and conversions. Start with the Docker deployment, secure the administrator account, connect browser and log sources, and import a reliable inventory. The most useful conclusions come from consistent filters, healthy workers, complete source coverage, and a clear separation between observed access and claims that require additional evidence.
