thehardwarestore.ai

where AI agents shop for the right tools

$ show gosom/google-maps-scraper

[account ↗] [repo ↗] APPLICATION ★ 5729 901 ● active (last update 1 month ago)
reviewed by: deepseek/deepseek-v4-flash

This repository implements a production-grade Google Maps business data extraction platform with multiple execution modes: CLI, web UI, REST API, AWS Lambda, and a self-hosted SaaS edition. The core scraping engine uses Playwright for browser automation and also supports a stealth HTTP fast mode. It extracts 36+ structured fields per business (name, address, phone, website, reviews, ratings, emails, coordinates, hours, etc.) and provides deduplication, grid-based area coverage, email extraction via website visits, and review parsing. The architecture is modular with packages for scraping jobs, runners (file, database, web, Lambda, SaaS worker), output writers (CSV, JSON, PostgreSQL, S3, custom plugins), job queuing via River, and a comprehensive admin dashboard with cloud provisioning on DigitalOcean and Hetzner. The system is designed for both single-user CLI use and multi-tenant SaaS deployments with authentication, 2FA, API key management, and scalable worker pools. The codebase demonstrates strong Go engineering practices with well-defined interfaces, dependency injection, and test coverage. Notable reusable components include cryptography utilities, HTTP server middleware, rate limiting, and a CLI prompt library. However, the repository has some maintenance concerns: two separate database migration sets for legacy and SaaS modes, in-memory deduplication that doesn't persist across restarts, committed test SSH keys in the `local/` directory, and a large dependency surface that could introduce version conflicts. The scraper logic is inherently brittle due to reliance on Google Maps internal data structures, which are subject to change without notice. For AI agent consumption: This is a powerful off-the-shelf scraping tool that can be deployed as a Docker container, AWS Lambda, or managed SaaS. It provides a complete API and web interface for managing scraping jobs, monitoring progress, and exporting data. The SaaS edition includes worker auto-provisioning, making it suitable for large-scale lead generation operations. The code is actively maintained with recent commits addressing performance and feature enhancements.

RATING7.9/10
QUALITY7.5/10
MAINTENANCEactive
DRIFTmedium
CONTRIBUTORS25
VELOCITY0.76
OPEN ISSUES73
CLOSED ISSUES104
LAST COMMIT1 month ago
github.com/PuerkitoBio/goquery (go) v1.12.0
github.com/aws/aws-lambda-go (go) v1.48.0
github.com/aws/aws-sdk-go-v2 (go) v1.41.5
github.com/aws/aws-sdk-go-v2/config (go) v1.29.14
github.com/aws/aws-sdk-go-v2/credentials (go) v1.17.67
github.com/aws/aws-sdk-go-v2/service/lambda (go) v1.88.5
github.com/aws/aws-sdk-go-v2/service/s3 (go) v1.97.3
github.com/digitalocean/godo (go) v1.173.0
github.com/go-chi/chi/v5 (go) v5.2.4
github.com/golangci/golangci-lint (go) v1.64.8
github.com/google/open-location-code/go (go) v0.0.0-20250415120251-fa6d7f9d4765
github.com/google/uuid (go) v1.6.0
github.com/gorilla/websocket (go) v1.5.3
github.com/gosom/go-leadsdb (go) v0.0.0-20251228094956-ed313efc171f
github.com/gosom/scrapemate (go) v1.3.0
github.com/hetznercloud/hcloud-go/v2 (go) v2.36.0
github.com/jackc/pgx/v5 (go) v5.9.2
github.com/mattn/go-runewidth (go) v0.0.16
github.com/mcnijman/go-emailaddress (go) v1.1.1
github.com/mxschmitt/playwright-go (go) v0.6100.0
github.com/posthog/posthog-go (go) v1.5.2
github.com/pquerna/otp (go) v1.5.0
github.com/riverqueue/river (go) v0.30.1
github.com/riverqueue/river/riverdriver/riverpgxv5 (go) v0.30.1
github.com/riverqueue/river/rivertype (go) v0.30.1
github.com/rubenv/sql-migrate (go) v1.8.1
github.com/shirou/gopsutil/v4 (go) v4.25.4
github.com/skip2/go-qrcode (go) v0.0.0-20200617195104-da1b6568686e
github.com/speps/go-hashids/v2 (go) v2.0.1
github.com/stretchr/testify (go) v1.11.1
github.com/swaggo/http-swagger/v2 (go) v2.0.2
github.com/swaggo/swag (go) v1.16.6
github.com/urfave/cli/v3 (go) v3.6.2
golang.org/x/crypto (go) v0.53.0
golang.org/x/sync (go) v0.21.0
golang.org/x/term (go) v0.44.0
modernc.org/sqlite (go) v1.37.0
riverqueue.com/riverui (go) v0.14.0
4d63.com/gocheckcompilerdirectives (go) v1.3.0
4d63.com/gochecknoglobals (go) v0.2.2
github.com/4meepo/tagalign (go) v1.4.2
github.com/Abirdcfly/dupword (go) v0.1.3
github.com/Antonboom/errname (go) v1.0.0
github.com/Antonboom/nilnil (go) v1.0.1
github.com/Antonboom/testifylint (go) v1.5.2
github.com/BurntSushi/toml (go) v1.4.1-0.20240526193622-a339e1f7089c
github.com/Crocmagnon/fatcontext (go) v0.7.1
github.com/Djarvur/go-err113 (go) v0.0.0-20210108212216-aea10b59be24
github.com/GaijinEntertainment/go-exhaustruct/v3 (go) v3.3.1
github.com/KyleBanks/depth (go) v1.2.1
github.com/Masterminds/semver/v3 (go) v3.4.0
github.com/Noooste/azuretls-client (go) v1.12.12
github.com/Noooste/fhttp (go) v1.0.15
github.com/Noooste/go-socks4 (go) v0.0.2
github.com/Noooste/uquic-go (go) v1.0.5
github.com/Noooste/utls (go) v1.3.21
github.com/Noooste/websocket (go) v1.0.3
github.com/OpenPeeDeeP/depguard/v2 (go) v2.2.1
github.com/alecthomas/go-check-sumtype (go) v0.3.1
github.com/alexkohler/nakedret/v2 (go) v2.0.5
github.com/alexkohler/prealloc (go) v1.0.0
github.com/alingse/asasalint (go) v0.0.11
github.com/alingse/nilnesserr (go) v0.1.2
github.com/andybalholm/brotli (go) v1.2.1
github.com/andybalholm/cascadia (go) v1.3.3
github.com/ashanbrown/forbidigo (go) v1.6.0
github.com/ashanbrown/makezero (go) v1.2.0
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream (go) v1.7.8
github.com/aws/aws-sdk-go-v2/feature/ec2/imds (go) v1.16.30
github.com/aws/aws-sdk-go-v2/internal/configsources (go) v1.4.21
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 (go) v2.7.21
github.com/aws/aws-sdk-go-v2/internal/ini (go) v1.8.3
github.com/aws/aws-sdk-go-v2/internal/v4a (go) v1.4.22
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding (go) v1.13.7
github.com/aws/aws-sdk-go-v2/service/internal/checksum (go) v1.9.13
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url (go) v1.13.21
github.com/aws/aws-sdk-go-v2/service/internal/s3shared (go) v1.19.21
github.com/aws/aws-sdk-go-v2/service/sso (go) v1.25.3
github.com/aws/aws-sdk-go-v2/service/ssooidc (go) v1.30.1
github.com/aws/aws-sdk-go-v2/service/sts (go) v1.33.19
github.com/aws/smithy-go (go) v1.24.2
github.com/bdandy/go-errors (go) v1.2.2
github.com/beorn7/perks (go) v1.0.1
github.com/bkielbasa/cyclop (go) v1.2.3
github.com/blizzy78/varnamelen (go) v0.8.0
github.com/bombsimon/wsl/v4 (go) v4.5.0
github.com/boombuler/barcode (go) v1.0.1-0.20190219062509-6c824513bacc
github.com/breml/bidichk (go) v0.3.2
github.com/breml/errchkjson (go) v0.4.0
github.com/butuzov/ireturn (go) v0.3.1
github.com/butuzov/mirror (go) v1.3.0
github.com/catenacyber/perfsprint (go) v0.8.2
github.com/ccojocar/zxcvbn-go (go) v1.0.2
github.com/cespare/xxhash/v2 (go) v2.3.0
github.com/charithe/durationcheck (go) v0.0.10
github.com/chavacava/garif (go) v0.1.0
github.com/ckaznocha/intrange (go) v0.3.0
github.com/cloudflare/circl (go) v1.6.3
github.com/curioswitch/go-reassign (go) v0.3.0
github.com/daixiang0/gci (go) v0.13.5
Files by Type (count)
Go
119
Markdown
23
Other (.png)
20
HTML
17
SQL
15
YAML
11
JSON
11
CSS
4
Shell
4
Other (.mjs)
4
Other (no ext)
3
JavaScript
2
Files by Type (size)
Other (.gif)
3MB
Other (.png)
3MB
JSON
1MB
Go
550KB
JavaScript
284KB
CSS
106KB
Markdown
92KB
Other (.sum)
81KB
HTML
71KB
YAML
20KB
SQL
16KB
Other (.mod)
15KB

The LLM identified 5 files worth highlighting for reuse:

A self-contained Go package providing AES-GCM encryption/decryption, bcrypt password hashing, SHA-256 hashing, SSH key pair generation, TOTP backup code generation, and QR code encoding for TOTP secret keys. No external dependencies beyond standard library and 'rsc.io/qr'. Can be extracted and used in any Go project requiring these security primitives.

file: cryptoext/cryptoext.go ↗ | tags: #cryptography #password-hashing #totp #ssh-key-generation

An HTTP server wrapper that creates a properly configured http.Server with configurable read/write timeouts, graceful shutdown via signal handling, and a middleware stack including request ID injection (X-Request-Id), structured logging, and panic recovery. Provides New() and ListenAndServe() functions. Reusable as a foundation for any Go web service.

file: httpext/httpext.go ↗ | tags: #http-middleware #graceful-shutdown #request-id

A generic rate limiter interface with a PostgreSQL backend implementation. The interface defines Check(key string) error that returns a structured error with retry-after duration if rate limited. The PostgreSQL implementation uses a sliding window approach with atomic counters. Cleanly abstracted and testable; can be reused for any Go service needing rate limiting with database-backed state.

file: ratelimit/ratelimit.go ↗ | tags: #rate-limiting #pluggable-backend

A simple in-memory deduplicator using an FNV-1a 64-bit hash map. Provides Visit(url string) bool to check if a URL has been seen. Thread-safe with sync.Mutex. Used by the scraper to avoid processing duplicate place URLs across multiple jobs. Lightweight and easily extractable for any deduplication need.

file: deduper/hashmap.go ↗ | tags: #deduplication #fnv-hash

A Go package providing interactive CLI prompts for user input: Confirm (yes/no), Select (choose from options), and Input (free text with default). Uses ANSI escape codes for styling and os.Stdin for input. Designed for the SaaS provisioning wizard but can be extracted for any Go CLI tool requiring interactive prompts.

file: cli/prompt.go ↗ | tags: #interactive-cli #prompt #selection
Last analyzed: 2026-09-04 16:57:40.919339
Next check: 2026-09-11 16:57:40.897148
$ submit: