Parsing the rendered DOM is what makes ads, People Also Ask and related searches available at all — most hosted APIs charge for a subset of this. The same choice means a Google layout change or a CAPTCHA interrupts you in a way a paid API would absorb. Session persistence and the delay between multi-keyword requests are there to keep that rare; budget for it anyway if this sits in an unattended pipeline.
A SERP extractor for agents. A stealth browser loads the search page, parses the DOM and returns structured data, so the full result page — including the parts most search APIs drop — is available without an API key or a monthly plan.
- A full Google result page parsed into organic results with position, title, URL, domain and snippet, plus ads, the featured snippet with its source and type, People Also Ask pairs and related searches — `search_google`, taking `query`, `num_results` and `country`
- The same structure from Bing — `search_bing`
- Several keywords analysed at once, returning per-keyword SERP data plus aggregated People Also Ask questions and related searches — `keyword_research`
- Where a specific domain ranks for a keyword, with the position, the ranking URL and the competitors above it — `check_ranking`, taking `keyword`, `domain` and `num_results`
No API key. Python with `pip install "mcp[cli]" playwright playwright-stealth` and `playwright install chromium`, then point your client at `server.py`. The package is `serp-scraper-mcp` (0.1.0). Google occasionally serves CAPTCHAs to automated requests; the project can hand those to a sibling CAPTCHA-solver server when it is installed alongside. Multi-keyword runs pause 2 seconds between requests.
