Sweden Google Business Profile Scraper
Pricing
from $0.004 / actor start
Sweden Google Business Profile Scraper
Extract Google Business Profile data across Sweden using an adaptive spatial grid. Get business names, addresses, phone numbers, websites, categories, ratings, review counts, and Google CIDs. Covers 33 Swedish industry categories. No Google API key needed. Export to JSON, CSV, or Excel.
Pricing
from $0.004 / actor start
Rating
0.0
(0)
Developer
August Lönn
Actor stats
0
Bookmarked
2
Total users
0
Monthly active users
6 days ago
Last modified
Categories
Share
Sweden GBP Discovery Scraper
Apify actor that systematically discovers all Google Business Profiles in Sweden using an adaptive spatial grid and Playwright browser automation.
How it works
- Input: An array of grid cells, each with coordinates (lat/lng) and a zoom level
- For each cell × search term: Opens Google Maps at the specified coordinates, searches with broad Swedish terms
- Scrolls through all results to load every listing in the viewport
- Extracts business data: name, address, phone, website, placeId, CID, category, rating, review count
- Deduplicates across all searches by Google Place ID
- Reports saturation: If any search returns ≥120 results (Google's cap), it flags the cell for subdivision
Input
| Field | Type | Default | Description |
|---|---|---|---|
cells | Array | required | Grid cells: { cellKey, lat, lng, zoom } |
searchTerms | Array | 8 Swedish terms | Broad search terms for discovery |
maxScrolls | Integer | 8 | Max scrolls per search (each loads ~20 results) |
visitDetailPages | Boolean | true | Click into each listing for phone/website/CID |
language | String | sv | Google Maps language |
maxConcurrency | Integer | 3 | Parallel browser pages |
Example input
{"cells": [{ "cellKey": "stockholm_center", "lat": 59.3293, "lng": 18.0686, "zoom": 14 },{ "cellKey": "malmo_center", "lat": 55.6049, "lng": 13.0038, "zoom": 14 }],"searchTerms": ["företag", "restaurang", "butik"],"visitDetailPages": true}
Output
Each discovered business is pushed to the default dataset:
{"placeId": "ChIJx8uLN7h3X0YR...","googleCid": "1234567890","name": "Restaurang Example","address": "Storgatan 1, 111 23 Stockholm","phone": "+46812345678","website": "https://example.se","latitude": 59.3293,"longitude": 18.0686,"category": "Restaurang","categories": ["Restaurang"],"rating": 4.5,"reviewCount": 123,"googleMapsUrl": "https://www.google.com/maps/place/...","cellKey": "stockholm_center","searchTerm": "restaurang","resultIndex": 0}
Search metadata (per cell × term) is stored in the key-value store under SEARCH_META.
Adaptive grid approach
Sweden is divided into ~1,100 quadtree cells where each cell contains ≤80 known businesses. Dense urban areas (Stockholm, Göteborg, Malmö) get small cells at zoom 14; sparse rural areas get large cells at zoom 7-10.
If a search returns ≥120 results (Google Maps' maximum), the orchestrator subdivides that cell into 4 smaller cells and re-queues them.
Coverage: 1,103 cells × 8 terms = 8,824 searches → estimated 300K-500K unique GBPs discovered.
Tech stack
- Apify SDK + Crawlee — actor lifecycle, dataset storage, request management
- Playwright — headless Chrome for Google Maps rendering and interaction
- TypeScript — type-safe extraction logic
Development
cd sweden-gbp-scrapernpm installnpm run dev # Run locally with Apify storage emulation
Deployment
apify loginapify push