boltscraper
v1.0.2
Published
Official Node.js SDK for Bolt Scraper — Fast, cloud-native Google Maps, reviews, and website data extraction API.
Downloads
718
Maintainers
Readme
Google Maps Scraper Node.js SDK (boltscraper)
The official Node.js and TypeScript SDK for Bolt Scraper — fast, proxy-free, cloud-native data extraction for Google Maps listings, Google customer reviews, and company websites.
Extract 60+ business attributes (names, phones, direct emails, social profiles, hours, ratings, coordinates) without Puppeteer, Playwright, browser overhead, CAPTCHAs, or IP bans.
Why Developers Use boltscraper
| Feature | Puppeteer / Playwright | Google Places API (New) | Bolt Scraper Node.js SDK | | :--- | :--- | :--- | :--- | | Speed & Setup | Heavy Chromium instances | Complex GCP billing setup | 5 lines of JavaScript/TypeScript | | IP Bans & CAPTCHAs | Constant Cloudflare/Google blocks | None (metered API) | 0% bans (automatic proxy rotation) | | Direct Emails | Requires custom DOM scraping | Not offered (0% returned) | Included (crawls company websites) | | Customer Reviews | Fragile DOM selectors | Max 5 reviews only | Extracts all 5,000+ reviews | | Data Storage | Unstructured text | 30-day cache ban | 100% owned indefinitely | | Pricing | Proxy costs ($50+/mo) | $32 – $65+ per 1k requests | $0 Free tier ($0.38 / 1k on paid) |
Installation
npm install boltscraperRequires Node.js 18.0.0 or higher (supports native fetch, ESM, and CommonJS).
Quickstart
Get your free API key at app.boltscraper.com (includes 1,000 free lead credits every month).
TypeScript / ES Modules
import { BoltScraper } from "boltscraper";
// Initialize client (or set BOLTSCRAPER_API_KEY environment variable)
const client = new BoltScraper({ apiKey: "bs_live_YOUR_API_KEY" });
// 1. Real-time Google Maps search (~2-4 seconds)
const response = await client.maps.search("Coffee shops in Seattle", 1);
console.log(`Found ${response.total_results || response.data?.length} places:`);
for (const place of response.data || []) {
console.log(`Name: ${place.Name}`);
console.log(`Phone: ${place.Phone} (${place["Phone Type"]})`);
console.log(`Website: ${place.Website}`);
console.log(`Rating: ${place["Average Rating"]} (${place["Review Count"]} reviews)`);
console.log("-".repeat(40));
}CommonJS (Node.js)
const { BoltScraper } = require("boltscraper");
const client = new BoltScraper({ apiKey: process.env.BOLTSCRAPER_API_KEY });
async function run() {
const response = await client.maps.search("Plumbers in Austin, TX");
console.log(response.data);
}
run();Core Capabilities & Examples
1. Synchronous Real-time Maps Search
Ideal for live search bars, agentic AI tool calling, and instant results without polling:
const results = await client.maps.search({
keyword: "Dentists in Austin, TX",
page: 1,
hl: "en"
});
for (const lead of results.data || []) {
console.log(lead.Name, lead["Full Address"], lead.Coordinates);
}2. Large-Scale Asynchronous Batch Jobs
Scrape entire cities or hundreds of queries with automatic website email enrichment:
// Launch background scraping job
const job = await client.maps.createJob({
keywords: ["Roofers in Miami, FL", "Solar contractors in Miami, FL"],
title: "Miami Home Services",
scrapeWebsites: true, // Crawls company websites for direct emails & socials
ultraMode: true, // Multi-point grid scan for up to 3x more results
webhookUrl: "https://your-crm.com/api/webhooks/bolt"
});
console.log(`Started job: ${job.job_id}`);
// Download CSV dataset upon completion
const csvText = await client.maps.downloadCsv(job.job_id);3. Google Reviews Extraction (Without OAuth)
Bypass Google's 5-review API limitation and extract all customer reviews, ratings, reviewer levels, and owner responses:
const reviewsData = await client.reviews.search({
placeId: "ChIJb8Jg9q-1RIYRAxvq_mZ0gXY",
maxReviews: 500,
sort: "newest"
});
const reviews = reviewsData.data || reviewsData.reviews || [];
for (const review of reviews) {
const stars = review.stars || review.rating;
const author = review.reviewer?.name || review.reviewer_name || "Anonymous";
const text = review.review_text || review.text;
console.log(`★ ${stars} by ${author}`);
console.log(`Text: ${text}`);
}4. Website Email & Social Link Enrichment
Turn raw domain lists into enriched B2B contact lists:
const res = await client.website.scrape("https://example.com");
const company = res.data || res;
console.log("Direct Emails:", company.emails);
console.log("Phone Numbers:", company.phones);
console.log("Social Links: ", company.social_links || company.socials);5. Webhook Signature Verification
Verify incoming webhook payloads with HMAC SHA-256:
import { WebhooksResource } from "boltscraper";
// In your Express / Next.js API route:
const isValid = WebhooksResource.verifySignature(
req.rawBody,
req.headers["x-bolt-signature"],
process.env.BOLT_WEBHOOK_SECRET!
);
if (!isValid) {
return res.status(401).send("Invalid signature");
}60+ Extracted Data Points
- Identity: Business Name, Category, Sub-categories, Google Category IDs, Place ID, CID, KGMID, Feature ID.
- Location: Full Address, Street Address, City, State, ZIP/Postal Code, Country, Municipality, Latitude, Longitude, Timezone.
- Contact: Formatted Phone, Phone Type (Mobile, Landline, VOIP), International Phone, Phone URI (
tel:), Website URL, Domain. - Enrichment: Direct Emails discovered from company websites, Social Media URLs (LinkedIn, Facebook, Instagram, Twitter/X, YouTube).
- Reputation & Hours: Star Rating, Total Reviews Count, Review URL, Operating Status (Open, Closed), Opening Hours (Monday–Sunday schedules).
- Media Assets: Logo URL, Main Photo URL, Photos Page URL, Favicon URL.
Error Handling & Rate Limits
import {
BoltScraper,
AuthenticationError,
QuotaExceededError,
RateLimitError,
BoltScraperError
} from "boltscraper";
try {
const results = await client.maps.search("Roofers Denver");
} catch (error) {
if (error instanceof AuthenticationError) {
console.error("Invalid API key. Check https://app.boltscraper.com");
} else if (error instanceof QuotaExceededError) {
console.error("Monthly quota exhausted. Upgrade plan at https://boltscraper.com/pricing");
} else if (error instanceof RateLimitError) {
console.error(`Rate limited. Retry in ${error.retryAfter} seconds.`);
} else if (error instanceof BoltScraperError) {
console.error(`API Error (${error.statusCode}): ${error.message}`);
}
}Documentation & Resources
- Documentation Portal: https://boltscraper.com/api/
- In-Depth Guides & Tutorials: https://boltscraper.com/blogs/
- Pricing Calculator: Google Places API Cost Calculator
- Sign Up (1,000 Free Leads/mo): https://app.boltscraper.com
License
MIT License. Copyright (c) 2026 Bolt Scraper.
