Brownbook Business Directory Scraper
Pricing
Pay per event
Brownbook Business Directory Scraper
Scrape public Brownbook business listings for lead generation, local SEO audits, and CRM enrichment.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Scrape public Brownbook business listings for lead generation, market research, local SEO audits, competitor mapping, and B2B prospecting. The actor collects business names, profile URLs, IDs, claimed status, categories, addresses, phones, websites, public emails when Brownbook exposes them, social links, descriptions, reviews, and other public listing details.
What does Brownbook Business Directory Scraper do?
Brownbook Business Directory Scraper turns public Brownbook directory data into a clean Apify dataset. Give it a keyword, location, country code, direct Brownbook profile URLs, or a mix of all of them. The actor reads public listing identifiers from Brownbook pages, optionally opens each matched profile through the public Brownbook API, and saves normalized rows ready for export.
Who is it for?
- π§² Lead generation teams building lists of local businesses.
- π Local SEO agencies checking business listings and claimed profiles.
- π§Ύ Sales operations teams enriching CRM records with public directory data.
- π§ͺ Market researchers mapping categories across cities or countries.
- π’ B2B founders validating niches and prospect segments.
- π Data analysts who need structured Brownbook listing exports.
Why scrape Brownbook?
Brownbook is a global business listing database. Public profiles can include contact details, descriptions, tags, categories, addresses, social links, and review counts. Exporting this information manually is slow. This actor automates collection while keeping the output simple enough to use in spreadsheets, CRMs, BI tools, and automation workflows.
Why use this actor?
- β HTTP-only implementation; no browser overhead.
- β Public profile enrichment through Brownbook's public API.
- β Direct profile URL support for precise lookups.
- β Keyword, location, and country filters.
- β Pay-per-result pricing model.
- β Output schema designed for lead-gen workflows.
- β Works with Apify datasets, integrations, API clients, and MCP.
What data can you extract?
| Field | Description |
|---|---|
name | Business name shown on Brownbook. |
profileUrl | Brownbook business profile URL. |
businessId | Brownbook numeric business identifier. |
claimed | Whether the listing is claimed. |
category, naicsTitle, tags | Public classification data when available. |
address, city, state, zipCode, countryCode | Location fields. |
phone, mobile, email, website | Public contact fields when available. |
facebook, instagram, linkedin, twitter, tiktok | Public social links when available. |
rating, reviewCount | Brownbook rating and review/comment count. |
description, hours | Public profile content. |
source, scrapedAt | Collection metadata. |
How much does it cost to scrape Brownbook business listings?
The actor uses pay-per-event pricing: a small start charge plus a per-result charge. You only pay for results that are saved. Keep the first run small, inspect the output, and then raise maxResults and maxPages for larger lead lists.
Quick start
- Open the actor on Apify.
- Enter a business keyword such as
locksmith,dentist, orrestaurant. - Add a location filter such as
San Joseor a country code such asUS. - Keep
maxResultslow for the first test run. - Run the actor.
- Export the dataset as CSV, JSON, Excel, XML, or connect it to your workflow.
Input options
searchQuery
Keyword or business name to match against public listing fields. Examples: locksmith, plumber, accounting, restaurant, digital marketing.
location
Optional city, state, ZIP, or country text filter. The actor matches it against address fields returned by Brownbook.
countryCode
Optional two-letter country code. Examples: US, GB, CA, AE.
startUrls
Direct Brownbook profile URLs or numeric IDs. Use this when you already know specific listings you want to enrich.
maxResults
Maximum number of businesses saved to the dataset.
maxPages
Controls how many sequential public Brownbook business IDs are scanned after direct startUrls. Increase this when your keyword is rare or you need more matches.
startBusinessId
Numeric Brownbook business ID where scanning begins. The default points to an older public section of the Brownbook directory and can be changed when you want to sample another ID range.
includeDetails
When enabled, the actor opens each matched profile through the public Brownbook API and enriches the row with more contact and description fields.
maxRequestRetries
Retry limit for transient HTTP errors.
Example input
{"searchQuery": "locksmith","location": "San Jose","countryCode": "US","maxResults": 20,"maxPages": 5,"startBusinessId": 488903,"includeDetails": true}
Example output
{"name": "San Jose Advantage Locksmith","profileUrl": "https://www.brownbook.net/business/39536898/san-jose-advantage-locksmith","businessId": "39536898","claimed": true,"address": "3103 Alum Rock Avenue, Suite: C, San Jose, CA","city": "San Jose","state": "CA","zipCode": "95127","countryCode": "US","phone": "(408)484-3856","rating": 0,"reviewCount": 32,"source": "directory","scrapedAt": "2026-05-18T08:00:00.000Z"}
Tips for better results
- Start with specific terms like
locksmithordentistinstead of broad words likebusiness. - Add
countryCodeto avoid collecting irrelevant countries. - Use direct
startUrlswhen you need exact profile enrichment. - Increase
maxPagesif the actor scans too few public IDs before finding enough matching listings. - Leave
includeDetailsenabled when you need contact fields and descriptions.
Common workflows
Build local sales lists
Run the actor with a service keyword and city filter, export CSV, and import the rows into your CRM or outreach platform.
Audit claimed profiles
Filter by a brand, category, or location and use the claimed field to identify profiles that may need ownership or cleanup.
Enrich CRM records
Pass known Brownbook profile URLs through startUrls and collect public profile metadata for matching records.
Map a niche
Run multiple small inputs for different service categories, combine datasets, and compare city coverage, phone availability, and profile completeness.
Integrations
Apify datasets connect to many downstream tools. Typical patterns include:
- Google Sheets exports for manual sales review.
- Zapier or Make scenarios that push rows to a CRM.
- Webhook-triggered enrichment after a prospect is added.
- Scheduled runs for recurring local-market monitoring.
- Dataset API pulls into Python, Node.js, or BI pipelines.
API usage with Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/brownbook-business-directory-scraper').call({searchQuery: 'locksmith',location: 'San Jose',countryCode: 'US',maxResults: 20,maxPages: 3,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
API usage with Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_APIFY_TOKEN')run = client.actor('automation-lab/brownbook-business-directory-scraper').call(run_input={'searchQuery': 'locksmith','location': 'San Jose','countryCode': 'US','maxResults': 20,'maxPages': 3,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
API usage with cURL
curl -X POST "https://api.apify.com/v2/acts/automation-lab~brownbook-business-directory-scraper/runs?token=$APIFY_TOKEN" \-H 'Content-Type: application/json' \-d '{"searchQuery":"locksmith","location":"San Jose","countryCode":"US","maxResults":20,"maxPages":5,"startBusinessId":488903}'
MCP usage
Use the actor through Apify MCP in Claude Code, Claude Desktop, or other MCP-compatible clients.
MCP URL:
https://mcp.apify.com/?tools=automation-lab/brownbook-business-directory-scraper
Claude Code setup:
$claude mcp add apify-brownbook "https://mcp.apify.com/?tools=automation-lab/brownbook-business-directory-scraper"
Claude Desktop JSON config:
{"mcpServers": {"apify-brownbook": {"url": "https://mcp.apify.com/?tools=automation-lab/brownbook-business-directory-scraper"}}}
Example prompts:
- "Find Brownbook locksmith listings in San Jose and summarize contacts."
- "Scrape these Brownbook profile URLs and return claimed status plus websites."
- "Create a CSV of Brownbook dentists in the US with phones and profile URLs."
Data quality notes
Brownbook profiles vary. Some have rich descriptions and social links; others only have basic address or phone data. The actor returns fields only when they are public and available in Brownbook's responses.
Limitations
Brownbook does not expose reliable public full-text search for every term, so the actor reads public listing feeds, scans public business IDs, and applies filters client-side. For exact known businesses, use startUrls to scrape direct profiles.
Legality
Legal and ethical use
This actor collects publicly available business listing data. You are responsible for complying with applicable laws, platform terms, privacy rules, and outreach regulations. Avoid spam, respect opt-out requests, and use public contact fields responsibly.
Troubleshooting
Why did I get fewer results than maxResults?
Your keyword, location, or country filters may be too narrow for the number of pages scanned. Increase maxPages, broaden the keyword, or remove one filter.
Why are some fields empty?
Brownbook does not expose every contact field for every profile. Empty fields mean the data was not public in the listing/profile response.
Why should I use startUrls?
Direct profile URLs are best when you already have a list of Brownbook businesses and want exact enrichment rather than discovery.
FAQ
Can it scrape emails?
Yes, when Brownbook exposes a public email field for a profile. Many listings do not include email.
Does it require login?
No. It uses public Brownbook web/API responses.
Does it use a browser?
No. It is an HTTP-only actor for speed and lower compute cost.
Can I schedule it?
Yes. Use Apify schedules to run recurring searches and export the newest dataset.
Related scrapers
- https://apify.com/automation-lab/google-maps-scraper
- https://apify.com/automation-lab/yellow-pages-us-scraper
- https://apify.com/automation-lab/yelp-scraper
- https://apify.com/automation-lab/tripadvisor-scraper
Changelog
Initial version: Brownbook public listing feed collection, direct profile enrichment, public contact fields, and normalized lead-gen output.
Support
If you need a field that appears on Brownbook but is not in the dataset, open an issue with an example profile URL and describe the missing field.