B2B Leads List Builder — Maps + Email + Phone Enrichment avatar

B2B Leads List Builder — Maps + Email + Phone Enrichment

Pricing

from $4.75 / 1,000 b2b leads

Go to Apify Store
B2B Leads List Builder — Maps + Email + Phone Enrichment

B2B Leads List Builder — Maps + Email + Phone Enrichment

Collect B2B leads from Google Maps and public business websites. Return flat records with company, website, email, phone, and address. Run with queries and Apify residential proxy; no target-site login. Free pricing: $0.0049 per enriched lead.

Pricing

from $4.75 / 1,000 b2b leads

Rating

0.0

(0)

Developer

Vitalii Bondarev

Vitalii Bondarev

Maintained by Community

Actor stats

0

Bookmarked

20

Total users

2

Monthly active users

4 days ago

Last modified

Features

Limited permissions

Share

Google Maps B2B Leads Scraper

Scrape public Google Maps business listings and visit public business websites. Maps supplies company, phone, address, and industry; websites supply emails and social links. Output is flat B2B lead rows. Run it from your Apify account with no target-site login; it requires the Apify residential proxy, which is the default proxyConfiguration.

  • Build SDR and outbound lists for an industry and city.
  • Research local markets with categories, ratings, review counts, and contacts.
  • Find recruiting or agency prospects with reachable business contacts.
  • Export flat rows for CRM enrichment or sequencing workflows, using public source data only.

What you get

Each returned lead is one flat row. A field is null when its source does not provide a value.

FieldTypeDescription
company_namestringGoogle Maps business name; null when absent.
websitestringBusiness website URL; null when unavailable.
emailstringBest harvested email; null when none is found. With verifyEmails, selection uses MX verification.
phonestringPhone from the Google Maps place record only; null when Maps has no phone.
addressstringFull place-record address; null when unavailable.
citystringCity parsed from the address; null when it cannot be parsed.
statestringState or region parsed from the address; null when it cannot be parsed.
countrystringCountry code parsed from the address or taken from the selected country.
industrystringPrimary Google Maps category; null when unavailable.
maps_ratingnumberGoogle Maps rating, normalized from 0 to 5; null when unusable.
maps_review_countintegerGoogle Maps review count; null when unusable.
linkedin_urlstringLinkedIn profile found in website social links; null when absent.
all_emailsarray of stringsDistinct harvested emails; empty when none are found.
email_statusstringvalid, role, risky, invalid, found, or none.
email_sourcestringwebsite_contact or website; null when no email is found.
social_linksobjectRecognized social profile URLs; empty when none are found.
place_idstringEncoded Google Maps place ID; null when unavailable.
maps_urlstringGoogle Maps place link; null when unavailable.
parse_confidencenumberQuality signal from 0 to 1; populated for each processed row.
querystringSearch query that produced the lead.
scraped_atISO 8601 stringUTC timestamp for the run.

Website enrichment visits the homepage and, when needed, up to three additional high-yield contact pages. It extracts public emails and recognized social links, including common [at] and [dot] forms.

With the default requireContact setting, only rows with a company name and at least one email or phone are returned. Name-only listings are left out.

Sample output

The email and LinkedIn values are hidden to avoid exposing personal data.

{
"company_name": "Blackhawk Digital Marketing",
"website": "https://www.blackhawkdm.com/",
"email": "<hidden for privacy>",
"phone": "(512) 736-0127",
"address": "410 Baylor St Unit b, Austin, TX 78703",
"city": "Austin", "state": "TX", "country": "US",
"industry": "Marketing agency", "maps_rating": 4.9, "maps_review_count": 62,
"linkedin_url": "<hidden for privacy>",
"all_emails": ["<hidden for privacy>"],
"email_status": "role", "email_source": "website_contact",
"social_links": {"linkedin": "<hidden for privacy>"},
"place_id": "ChIJhxZPAgm1RIYRB2h0ieTUr1I",
"maps_url": "https://www.google.com/maps/place/?q=place_id:ChIJhxZPAgm1RIYRB2h0ieTUr1I",
"parse_confidence": 1, "query": "marketing agencies in Austin TX",
"scraped_at": "2026-10-29T04:55:23.413448+00:00"
}

Pricing

This Actor uses pay-per-event pricing. The primary event is b2b-lead: one enriched B2B lead.

The Actor also charges an apify-actor-start event once per GB of run memory, minimum one event.

PlanActor StartB2B lead
Free$0.00005$0.0049
Bronze$0.0000495$0.004851
Silver$0.000049$0.004802
Gold$0.0000485$0.004753
Platinum$0.000048$0.004704
Diamond$0.0000475$0.004655

For example, 100 results = $0.49005 on Free, assuming one Actor Start event: 100 × $0.0049 on Free for B2B lead events, plus $0.00005 on Free for the start event.

At Free-plan rates, 1,000 b2b-lead events = $4.90 and 10,000 b2b-lead events = $49.00, before Actor Start events.

With requireContact: false, places without a contact are also pushed and charged as b2b-lead events.

You pay only for the events listed above. This Actor does not use the Pay per event + usage option, so run platform usage (compute, proxy traffic, and storage) is not billed separately.

How to use

  1. Enter one or more Google Maps search strings, usually combining an industry with a city.
  2. Configure the default Apify residential proxy in proxyConfiguration.
  3. Set maxResults, requireContact, verifyEmails, language, and country.
  4. Run the Actor to search Maps, enrich websites, collect contacts, and save flat rows.
  5. Review email_status, parse_confidence, ratings, and review counts.
  6. Repeat the run through Apify Schedules; weekly is a starting point for prospect-list refreshes.
{
"queries": ["marketing agencies in Austin TX"],
"proxyConfiguration": {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]},
"maxResults": 20,
"requireContact": true,
"verifyEmails": true,
"language": "en", "country": "us"
}

Input parameters

ParameterWhat it doesDefault
queriesRequired list of Google Maps search strings, typically an industry and city. Non-paying (Free) accounts: only the first query is used.Required
proxyConfigurationApify proxy settings for Maps and website requests; residential access is required for Maps.useApifyProxy: true, apifyProxyGroups: ["RESIDENTIAL"]
maxResultsMaximum places processed per query; accepted values are 1–300 and pagination is automatic. Non-paying (Free) accounts: at most 5 places per run.20
requireContactReturns only rows with an email or phone when enabled. Disable to include places without harvested contacts.true
verifyEmailsMX-verifies harvested emails and assigns verification statuses when enabled.true
languageTwo-letter result-language code: en, es, fr, de, it, pt, ja, ko, or zh.en
countryTwo-letter result-localization and default-country code: us, gb, ca, au, de, fr, es, it, jp, br, mx, or in.us
disableUsageStatsSet to true to turn off the run summary described in Usage statistics.false

Limits and edge cases

ConditionWhat you seeWhat to do
The account is not paying (Free)Only the first query is run and maxResults is capped at 5 places; the log shows "Free run limits applied". Paying accounts are not limited this way.Use a paying Apify account for more queries or more than 5 places.
maxResults is below 1 or above 300The accepted range is 1–300 per query.Use 1–300; split broad searches into narrower city, neighborhood, or subcategory queries.
One area has more places than Maps returnsGoogle itself caps a single area at roughly 120–300 places.Split the search into narrower queries.
Datacenter proxy access is used for MapsGoogle Maps can block datacenter IPs; the run can fail or return no usable results.Use the Apify RESIDENTIAL group. GOOGLE_SERP does not support Maps URLs.
Proxy initialization failsOUTPUT contains proxy_init_failed or no_proxy, and no places are processed.Give the Actor access to the Apify residential proxy and keep the default configuration.
Google blocks a query or shows a consent wallThe Actor tries up to three residential-IP rotations. If still blocked, the query is skipped with result count zero; earlier rows remain.Try a narrower query or run again with residential proxy configuration.
A Maps fetch fails for a queryThat query has result count zero and processing continues; earlier rows remain.Check query and proxy, then retry.
A query returns no placesNo lead rows are saved for that query.Check industry, city, country, and language; try a more specific string.
A place has no website or its website request failsNo website contacts are harvested. Website requests use a 20-second timeout and return empty contact lists on failure.Use requireContact: false to include places without harvested contacts.
A website has no email addressThe row may still contain a Maps phone; with requireContact: true, an email or phone is required.Review phone, email_status, and all_emails.
verifyEmails is disabledHarvested addresses are returned without MX verification; a found address can have status found.Enable it for MX-layer status fields.
MX verification reports a positive resultIt indicates that the domain accepts mail, not that a specific mailbox exists.Treat email_status as a screening signal, not a delivery guarantee.
Proxy authentication fails during a Maps fetchOUTPUT contains proxy_auth_failed and the run stops; earlier rows remain.Check your Apify proxy access or subscription, then rerun.
The input contains no usable queryOUTPUT contains {"error": "no_queries"} and no places are processed.Provide at least one non-empty string in queries.
Public Google Maps listings and public business websites are usedSee the legal FAQ below.Review applicable law and source terms before using the output.

FAQ

How much does it cost to scrape B2B leads?

See Pricing for every plan-labelled event rate.

Why is my result empty?

Possible causes include no Maps places, a skipped blocked query, no reachable contact while requireContact is enabled, or failed proxy initialization. Check the query and residential proxy, and try requireContact: false if you also need places without harvested contacts. For no_queries, proxy_init_failed, or no_proxy, inspect OUTPUT.

Why are some emails marked role, risky, invalid, or found?

With verification enabled, harvested addresses receive statuses such as valid, role, risky, or invalid. With verification disabled, an address can be found. MX verification is not a mailbox delivery guarantee.

The Actor collects public data from Google Maps listings and public business websites. Legality depends on your use case, applicable law, and source terms or ToS; review them before using the output.

Usage statistics

This Actor creates a small, content-free summary at the end of each run, used only to monitor reliability and improve this Actor. No input values, credentials or scraped data are sent.

A copy of the exact record for your run is saved as USAGE_STATS in your own Apify key-value store.

To opt out, set disableUsageStats to true in the input. Nothing is sent then.

Full list of collected fields

⌂ 换网址