v2.3 - Country Restrict (cr) Parameter Support (2025-11-18)
Country restrict parameter : New --cr option to restrict results by country
Usage: --cr countryDE , --cr countryNL , --cr countryUS , etc.
CR parameter included in JSON metadata output
Supports Google's cr= parameter for country-specific filtering
All fetch functions now accept optional cr parameter
Session initialization includes cr parameter when provided
Deeplink extraction : Now correctly extracts Google's breadcrumb paths
Deeplinks now show format like: https://domain.com › page › subpage
Falls back to full URL when breadcrumb not available (e.g., LinkedIn results)
Deeplink field now contains actual breadcrumb citation text from Google
Validates deeplink content to ensure it's URL-like
v2.1 - SERP Ranking Added (2025-11-18)
SERP ranking : Each result now includes its position (rank: 1, 2, 3, etc.)
Ranking appears in all output formats: JSON, CSV, and terminal
Debug logging now includes rank information
JSON output structure updated to include rank as first field
CSV output now starts with rank column
Terminal output displays results with their rank
v2.0 - Country Code Fix & Multi-Region Support (2025-11-18)
Country code mapping : Indonesia (id) and other countries with special Google domains now work correctly
Added automatic domain mapping for 23+ countries with non-standard Google domains
get_google_domain() function to map country codes to correct Google domains
Support for special domains:
Indonesia: google.co.id (was failing with google.id )
UK: google.co.uk
Australia: google.com.au
Japan: google.co.jp
And 19+ more countries
Documentation now lists all supported country codes
Added country mapping table in code comments
✅ Netherlands (nl) - 0.80s
✅ Indonesia (id) - 0.83s
✅ Japan (jp) - 0.75s
✅ UK (uk) - 0.77s
✅ Australia (au) - 0.95s
v1.0 - Initial Concurrent Implementation (2025-11-18)
3-step scraping with negative domain search
Fully concurrent HTTP requests and HTML parsing
JSON and CSV output formats
Performance timing display
Typical completion: 0.8-1.0 seconds
44% faster than sequential execution
Concurrent requests with asyncio.gather()
Concurrent parsing with asyncio.to_thread()