SerpTrail is a brand new self-hosted SEO and GEO rank tracker from SerpApi built with Rails and SQLite for easy monitoring of search performance. Do you need to track keyword positions across locations, see how are your pages ranking or spy on your competitors? SerpTrail will help you with that and more. Continue reading to find out what can you do with SerpTail today and what's coming next.
A new tool for tracking your SEO and GEO

Search Engine Optimization (SEO) is is the practice of improving a website so it can be more easily discovered and ranked by search engines. It involves optimizing content, keywords, page structure, loading performance, links, and user experience so that search engines can understand what each page is about and show it to people searching for relevant topics.
The goal of SEO is to attract more organic traffic from visitors who find your site through unpaid search results and SEO tracking is the process of how to monitor your website search performance in search engines over time. This often means monitoring of your website pages positions in Google search and other search engines for important keywords close to your business.
This is why we created SerpTrail, a new Open Source rank and mentions tracker. The first version of SerpTrail is built around Google Search API, including the AI Overviews. However, SerpApi supports over 100+ APIs and so the next versions of SerpTrail will pick up new engines along the way as well.
Quick demo
Here's an introduction video so you can get look and feel for this new tool:
Introducing SerpTrail from SerpApi
Position tracking
Tracking your positions helps you understand whether your SEO work is actually paying off. You may publish new content, update old articles, build backlinks, or improve technical SEO but still stay clueless of what worked. SerpTrail can show you the usual graph of position changes over time:

Position tracking is useful because it helps you:
- See which keywords are improving or declining
- Measure the impact of content updates and SEO changes
- Find pages that are close to ranking well and worth improving
- Spot competitors gaining visibility
- Understand traffic changes from search
- Prioritize your SEO efforts based on real data
Rankings change constantly. Search engines update their algorithms, competitors publish new content, and user behavior evolves. A page that ranks well today might slowly drop over time if it is not maintained.
SEO tracking is a long term effort. When you know where your pages stand, you can react faster, improve the right content, and make better decisions about where to invest your time.
What is GEO and why it matters today
Generative Engine Optimization (GEO) is the practice of improving and monitoring how your brand, site, or content appears in AI-generated answers and search experiences like AI Overview or AI Mode. GEO might be a future of SEO as generative search answers become more and more common.
SEO usually asks the following questions:
- Where does my page rank in Google?
- Which keywords bring visibility?
- Which competitors rank above me?
GEO on the other hand is about these:
- Is my site cited in AI-generated answers?
- Do AI Overviews mention my content?
- Which sources are AI systems using for my market?
Users increasingly get text-based answers directly from search results and AI assistants. A regular SERP ranking is still valuable, but it is no longer the whole picture. If your competitors are cited more in generated answers, your organic visibility can decline even if traditional rankings look stable.
SerpTrail is built from the first version to care about both. If there is a an AI Overview for a particular keyword, it's saved automatically.
Tracking many keyword
SerpTrail changes how your website rank is monitored. You can add all the interesting keywords that matter for your product, content, or market without immediately connecting those searches to your website. Once you do, you'll immediately see the performance of your website against the saved data.

This way you can monitor as many websites as you have, including old and new competitors. SerpTrail also supports running searches across multiple locations.
You can use this tracking for:
- Product keywords
- Brand keywords
- Competitor comparisons
- Informational search queries
- Transactional search queries
- Content topic monitoring
- Localized country-specific search
Each keyword can be checked on a schedule:
- Daily
- Weekly
- Biweekly
- Monthly
For every due keyword, SerpTrail schedules background jobs through Solid Queue and records the search results for each configured location.
This option lets you track many keywords on a monthly basis for free as SerpApi comes with 250 free searches for a month.
You can also easily add many keywords at once using the bulk import.
Collecting search data
SerpTrail uses SerpApi to collect Google search results and preserve the full search response for each check. That means you can review not only positions, but also the context around those positions.
Depending on the search result data available, SerpTrail can track and expose:
- Organic result positions
- Ranking URLs
- Search locations/country codes
- AI Overview presence
- AI Overview citations
- AI Overview citation position
- Competitor domains in live search results
- Full historical search run data
Internally this is done by saving the full SerpApi JSON:
serp-trail(dev):004> SearchRun.last.raw_response
SearchRun Load (0.4ms) SELECT "search_runs".* FROM "search_runs" ORDER BY "search_runs"."id" DESC LIMIT 1 /*application='SerpTrail'*/
=> "{\"organic_results\":[{\"position\":1,\"title\":\"Apple iPhone 18\",\"link\":\"https://apple.com/shop/buy-iphone/iphone-18\",\"snippet\":\"Buy iPhone 18 directly from Apple with financing options.\"},{\"position\":2,\"title\":\"iPhone 18 on Amazon\",\"link\":\"https://amazon.com/dp/iphone-18\",\"snippet\":\"Find iPhone 18 deals on Amazon with fast shipping.\"},{\"position\":3,\"title\":\"iPhone 18 at Walmart\",\"link\":\"https://walmart.com/iphone-18\",\"snippet\":\"Shop iPhone 18 at Walmart with great prices.\"}]}"This design will let us add other useful features later for data you already have.
Historical performance
Having full historical search run data is what enables SerpTrail to give you an overview on your website historical ranking:
- Current position
- Previous position
- Position changes over time
- Which URL ranked for each check
- Search result snapshots for past runs
- AI Overview presence and citation changes
- Performance by country/location
- Performance across multiple tracked sites

This lets you answer questions like:
- Did we improve after publishing new content?
- Did a competitor overtake us?
- Are rankings different in the US vs. UK?
- Did Google start showing an AI Overview for this query?
- Are we cited in AI Overviews more or less often than before?
OpenAI integration
SerpTrail 1.0 includes an optional AI chat assistant powered by OpenAI and the RubyLLM library. The assistant can answer questions about tracked keyword history, compare sites, summarize ranking changes, and even use live search tools powered by SerpApi:

To use the chat assistant it's required to also add an OpenAI API key in Settings. This key is not required for regular tracking.
Combining your existing data with live search gives this assistant a lot of capabilities which will be extended in future versions.
Self-hosting SerpTrail
SerpTrail is designed for effortless self-hosting. It is a Ruby on Rails application using SQLite, Solid Queue, Solid Cache, and Solid Cable, so you can run it without provisioning PostgreSQL, Redis, or extra infrastructure. This means you only need a storage like a Docker volume for data and a couple of environment variables.
The authentication is kept simple for now with HTTP Basic Auth. We also need SECRET_KEY_BASE which is a standard secret needed for Rails applications. And since service API keys are designed to be added in Settings, you'll need to provide Active Record encryption keys for their database encryption.
Docker
Here's how to run SerpTrail with plain Docker using our official image. Since Docker creates non-existing volumes automatically, you can run the application directly with a single docker run command. Provide the name, port, volume, environment variables and use the serpapi/serptail image:
docker run -d \
--name serptrail \
-p 80:80 \
-v serptrail_storage:/rails/storage \
-e SECRET_KEY_BASE="change-me-generate-a-long-random-value" \
-e HTTP_AUTH_USERNAME="admin" \
-e HTTP_AUTH_PASSWORD="change-me" \
-e AR_ENCRYPTION_PRIMARY_KEY="change-me-generate-once" \
-e AR_ENCRYPTION_DETERMINISTIC_KEY="change-me-generate-once" \
-e AR_ENCRYPTION_KEY_DERIVATION_SALT="change-me-generate-once" \
-e SOLID_QUEUE_IN_PUMA="true" \
serpapi/serptrail:latest
The container entrypoint runs database preparation automatically before the Rails server starts. The volume serptrail_storage will be created automatically, but we need to tell Docker to mount it as /rails/storage.
To keep things as a single command, we can use the SOLID_QUEUE_IN_PUMA option to run the background job as part of the web process. Now you can open your deployed URL and sign in with the HTTP Basic Auth credentials you configured.
Docker Compose
Running SerpTrail with Docker Compose is not that different from running with a single Docker command. Create the Docker Compose YAML file and define SerpTrail as a service. Again, you don't need to run background jobs separately if you don't want to. Here's such an docker-compose.yml file:
services:
web:
image: serpapi/serptrail:latest
ports:
- "80:80"
environment:
SECRET_KEY_BASE: "change-me-generate-a-long-random-value"
HTTP_AUTH_USERNAME: "admin"
HTTP_AUTH_PASSWORD: "change-me"
AR_ENCRYPTION_PRIMARY_KEY: "change-me-generate-once"
AR_ENCRYPTION_DETERMINISTIC_KEY: "change-me-generate-once"
AR_ENCRYPTION_KEY_DERIVATION_SALT: "change-me-generate-once"
SOLID_QUEUE_IN_PUMA: "true"
# Optional initial values; these can also be configured in /settings.
# SERPAPI_API_KEY: "your-serpapi-key"
# OPENAI_API_KEY: "your-openai-key"
volumes:
- serptrail_storage:/rails/storage
restart: unless-stopped
volumes:
serptrail_storage:Then you can run it with the usual Docker Compose commands such as:
docker compose up -d
docker compose downKamal, Coolify, and others
We plan to document a few other options on how to run SerpTrail. For one, you can run it with Kamal directly from the git repository (useful if you are going to fork the project). And if you are looking for a PaaS like Coolify, we have a post on How to start self-hosting with Coolify 4. Coolify lets you run services using a Docker Compose file we already created.
Alternatives
SerpBear
SerpBear is an open source project for tracking your website keywords performance in Google search. It's an already established project, so it packs a little bit more functionality, but that won't last long. SerpTrail is pretty ambitions for the future as there is a plan to integrate more APIs from SerpApi.
Serposcope
Serposcope is a free rank tracker for SEO. Unlike SerpBear and SerpTrail, you can run Serposcope locally without 3rd-party API keys. This has a small downside, though. You might need to configure your own CAPTCHA solvers anyway which makes this advantage more work in the end.
What's next
SerpTrail 1.0 is just a start. We'll add more things around generative search performance as well as local SEO. You should also tell us what you want to see in the next versions by opening issues or submitting pull requests on the project's GitHub. SerpTrail is Open Source after all and contributions are welcome.