From a keyword to a ready-to-use dataset — in your browser.
Collect search results and keyword suggestions, check website rankings and page indexing.
Jobs, proxies, live statistics and exports in one local dashboard.
Google SERPs · Search suggestions · Rank checking · Index checking · CSV / JSONL / TXT
English · Русский
Requires BlankTrail Proxy with a licence that includes Challenge Breaker. The parser itself is free and open source under MIT. The proxy service and exit connections are obtained separately. BlankTrail solves reCAPTCHA locally on Windows and Linux, including servers without a GPU.
These GIFs use saved screenshots of the actual interface, with smooth scrolling and explanatory captions. Screenshot data is illustrative; the animation does not show requests executing or measure their speed.
Full size: status dashboard · job and results.
Features · Quick start · First job · Proxies and VPN · Export · Speed and reCAPTCHA · Full guide
| Your task | What the parser does | Input |
|---|---|---|
| Collect Google results | Saves positions, titles, URLs and snippets; ads and related searches are separate datasets | Keywords, one per line |
| Collect search suggestions | Expands keywords with alphabet substitutions and removes duplicates; Multiword adds substitutions between words; off-topic suggestions are filtered out at export by words or by meaning | Seed keywords |
| Check website rankings | Finds your target domain for each keyword within the chosen search depth | Keywords + target domain |
| Check page indexing | Checks whether Google returns a specific URL | Page URLs |
| Prepare data for SEO and analysis | Lets you select fields, column order, filters and file format, with a preview | Results of any job |
| Connect your own tool | Starts and controls jobs through REST; offers single searches in SerpApi format | An HTTP request with an API key |
Your data stays with you. Job history and results are stored in SQLite beside the program. Stop a job, resume where it left off or retry only failed requests. The dashboard supports English and Russian, with light and dark themes.
Ready-made builds need no Go installation, compilation or dependency setup.
| Your system | Download |
|---|---|
| Windows, Intel / AMD | gserp.exe |
| Windows, ARM64 | gserp-arm64.exe |
| Linux, x86-64 | gserp-linux-amd64.tar.gz |
| Linux, ARM64 | gserp-linux-arm64.tar.gz |
| macOS, Apple Silicon | gserp-macos-apple-silicon.tar.gz |
| macOS, Intel | gserp-macos-intel.tar.gz |
All releases · SHA256 checksums · Changelog
Windows: put gserp.exe in its own folder and double-click it. The program appears in the notification area and opens your browser.
Linux / macOS: unpack the archive and run ./start.sh or ./gserp serve.
Dashboard: http://127.0.0.1:8080. It is accessible only from this machine by default. First launch and download verification →
Start BlankTrail Proxy with Challenge Breaker and leave it running during collection.
- In BlankTrail, open Settings → API key and issue or copy a key.
- Open Settings in the parser. Enter the control API address, usually
http://127.0.0.1:8891, and the key. - Press Check connection. The dashboard explains if the service is unavailable, the key was rejected or Challenge Breaker is not enabled.
Open Proxies and configure a profile: a file, a URL-based proxy list or BlankTrail VPN gateways. The parser manages ports, sessions and jobs itself. Proxy and VPN setup below ↓
- Open Jobs → New job. Give it a name, for example “Coffee makers — SERPs”.
- Choose Parsing. Enter
coffee maker for homeandbuy coffee maker, one keyword per line, or upload a.txtfile. - Set the country, language and search type: Desktop or Mobile. One page is enough for a first check.
- Choose result fields, deduplication and a proxy profile. Start with a small number of threads, for example 4.
- Press Start. The job page shows progress, speed, errors, session state and Google challenges.
- Open Export, select the job and save its results as CSV, JSONL or TXT.
How to tell it is working: completed requests increase, results appear, and errors and challenges have separate counters. Stop keeps collected data; Resume finishes what is left. Retrying errors reruns only unsuccessful requests.
All job settings and macros → · Full form in PNG
A Parsing job can apply several formats to each seed keyword:
{query}
"{query}"
{query} reviews
{query} {ABC:a:z:1}
{query} {num:1:100}
Press + to add a format. Macros expand before the job starts, and duplicate queries are removed. Organic results, ads and related searches can be selected and exported separately. Macro examples and limits →
Choose Position check, enter a target domain such as example.com and supply your keywords. Set the country, language, device and search depth. Results show the site's position or that it was not found within the pages examined. Site history is also available through the API.
Choose Index check and upload page URLs, one per line. A successful check with a negative result is counted separately from a request that failed. The check reflects Google's response under the job's conditions; a missing URL alone does not prove permanent removal from the index.
Choose Search suggestions, enter seed keywords and select a language. Multiword adds alphabet substitutions between words. Requests per key, at most limits expansion; 0 removes that limit.
Suggestions are deduplicated by text. A completion that only hands back the letter typed alone, still standing in its place, is not a suggestion and is left out as it is collected; a one-letter word of the job's language (a or i in English) and a digit are kept. Each suggestion is marked by whether it has any word of its key in it, in any form.
At export, the Suggestions filter is No filter, By words or By meaning. By words leaves out suggestions with no word of their key. By meaning also leaves out those whose closeness to the key is below Closeness at least (0.54 by default, 0.30–0.80). For it, open Settings → Meaning filter for search suggestions and press Download the model once (about 132 MB); it runs locally on the CPU and sends nothing anywhere. New suggestions are then scored as they are collected; a job collected earlier is scored from its page with Score closeness to the key, and until then is filtered by words. The tab shows how many suggestions the filter leaves out, and the Related to the key and Closeness to the key columns can be added to the file.
Suggestions, Multiword and the meaning filter → · Form in PNG
One profile holds one set of exits and its settings. Create separate profiles for different proxy lists or VPN connections, then choose a profile when creating a job. The default profile handles jobs that do not select another one, and single searches through the API.
| Source | Setup | Useful for |
|---|---|---|
| File | Enter the path to a list, one proxy per line | Your own persistent pool |
| URL | Enter the list URL and refresh interval | A provider's regularly updated list |
| BlankTrail VPN gateways | Load configurations into BlankTrail, then select gateways in the parser profile | VPN subscriptions or individual configurations |
Each profile has its own failure ban, threads per proxy and port connection protocol. A proxy list can use a first hop: a SOCKS5 proxy or a VPN gateway. VPN configurations are grouped by subscription, with their last measured latency. Exits that terminate TLS themselves (they show their own certificate instead of the site's) are refused by default; tick Work through exits that terminate TLS themselves only for a list you trust.
A profile with no exits does not run search jobs. Its jobs wait in the queue as waiting for exits, can be stopped or deleted meanwhile, and start by themselves once exits are added on the Proxies screen. Search suggestion jobs go out directly and do not wait.
A profile can have a connection limit for the proxy. Set Connections to the proxy (0 — no limit) a little below what your provider's tariff allows (say 30) and keep the Reserve for solving a captcha at 3, the default. Every job and the identities kept warm on that profile share the limit. Once it is reached, the parser holds new requests back instead of failing them: searches and captchas being solved go first, and hidden addresses are read on what is left. A solve is counted as the reserve, because the solver opens connections of its own. So is a session's first request in a job, or its first from a new address, until Google answers it, since it is likely to meet a captcha: a job on a limited profile starts its sessions a few at a time (about ten on a limit of 30 with a reserve of 3) while the first ones pass their checks. If your solver opens more connections per captcha, raise the reserve.
It is a soft limit. The parser corrects its own count from BlankTrail's — every two seconds while the profile carries traffic, every ten when it is idle. Connections the service holds by itself (retries, the solver's own, idle ones) are counted and hold new requests back, but the parser cannot close them, so the count can briefly go over the limit until BlankTrail lets them go. Use BlankTrail 1.3.24 or newer: it serves the light connection listing the parser reads and closes idle connections to the proxy, which keeps such overshoots short. The job page shows Connections to the proxy: U of L, captchas being solved: S; the new-job form warns when the threads asked for are more than the limit leaves room for. Nought is no limit, and a profile without one behaves as before.
There is no need to assign proxies to BlankTrail ports manually. The parser opens ports through the control API and keeps sessions with their cookies and fingerprints. If BlankTrail restarts, it opens its ports again and leaves alone ports other programs opened. The job page shows sessions working, resting or passing a Google challenge; profile statistics distinguish network failures from Google refusals.
Profiles and first-hop setup → · Full VPN screen
Open Export → select a job → configure the file. Preview result parts, columns and their order, delimiters, line endings and Excel BOM before downloading. Saved jobs can be exported again later.
| Format | Use |
|---|---|
| CSV | Tables, Excel and analytics tools |
| JSONL | Large datasets: one JSON object per line |
| TXT | One selected field per line, such as a URL or suggestion |
Deduplicate search results by URL or host, and suggestions by text. Only the site keeps the results of one site and its subdomains and leaves out every other site the search answered with; a pasted address works as well as a name. Suggestion filters (By meaning when the job is scored, By words otherwise, see above) are applied at export, so the saved results remain available without filtering too. Addresses with non-Latin letters read as letters in the results table and the History; files keep them exactly as they came.
Export and API → · Export screen in PNG
In the team's demonstration runs for the video overview:
| Mode | Measured speed |
|---|---|
| Suggestions | Up to 150,000 requests/min |
| SERP parsing | Around 1,600 requests/min already at 100 threads |
100 threads was that run's setting, not a program limit. Speed depends on the machine, quality and number of exits, job settings and Challenge Breaker capacity. A short job may finish before reaching steady speed; compare long runs after session warm-up. A connection limit on the profile caps speed by design and slows the start, while new sessions pass their checks a few at a time. Requests, result pages and captured rows are different counters.
BlankTrail solves reCAPTCHA locally, without requiring a GPU. In a separate documented run of 8,514 keywords, it solved 1,899 of 1,936 challenges — 98%. Sessions continue working after solving. The job page shows challenges passed, being solved or queued, and captchas per thousand pages.
Previous benchmark conditions, pages per minute and warm-up →
Can it work without BlankTrail? Collection requires BlankTrail Proxy with Challenge Breaker. No Google or SerpApi API key is needed; the BlankTrail key connects the parser to the proxy service.
Must I keep the browser open? The program performs collection. Close the tab and return to the job later. The parser and BlankTrail must keep running.
Can I use a Linux server? Yes. The dashboard listens on localhost by default. Enable access from other machines in Settings and set a password. Server setup →
What about a slow start or errors? Check the BlankTrail connection, profile and its statistics. Fresh sessions pass challenges before reaching steady speed; on a profile with a connection limit they start a few at a time. The job shows whether threads are waiting for an exit, a session or the solver, and a job whose profile names no exits waits in the queue until exits are added. Diagnostics and settings →
Written in Go, with SQLite storage, REST API /api/v1/ and a SerpApi-compatible GET /search, whose link is the site's own address, read behind Google's redirector within the request's deadline. Issue an access key with gserp key new; only its hash is stored. The API starts, stops and resumes jobs, streams results and exposes site history as JSONL.
API reference · CLI · Building and reproducible releases · MIT licence
The GIF tours are built from the screenshots in assets/screenshots/. To regenerate them, install Pillow and run python docs/media/build_readme_gifs.py. Generator source
Report bugs and feature requests in GitHub Issues. For speed problems, include job parameters and proxy statistics without keys or passwords.
Download Google Parser · Full guide · Changelog · BlankTrail Proxy


