Brownbook Business Directory Scraper avatar

Brownbook Business Directory Scraper

Pricing

Pay per event

Go to Apify Store
Brownbook Business Directory Scraper

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

Stas Persiianenko

Maintained by Community

Actor 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?

FieldDescription
nameBusiness name shown on Brownbook.
profileUrlBrownbook business profile URL.
businessIdBrownbook numeric business identifier.
claimedWhether the listing is claimed.
category, naicsTitle, tagsPublic classification data when available.
address, city, state, zipCode, countryCodeLocation fields.
phone, mobile, email, websitePublic contact fields when available.
facebook, instagram, linkedin, twitter, tiktokPublic social links when available.
rating, reviewCountBrownbook rating and review/comment count.
description, hoursPublic profile content.
source, scrapedAtCollection 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

  1. Open the actor on Apify.
  2. Enter a business keyword such as locksmith, dentist, or restaurant.
  3. Add a location filter such as San Jose or a country code such as US.
  4. Keep maxResults low for the first test run.
  5. Run the actor.
  6. 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 locksmith or dentist instead of broad words like business.
  • Add countryCode to avoid collecting irrelevant countries.
  • Use direct startUrls when you need exact profile enrichment.
  • Increase maxPages if the actor scans too few public IDs before finding enough matching listings.
  • Leave includeDetails enabled 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 ApifyClient
client = 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().items
print(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

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.

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.