# Retail Store Contact Scraper (`scrapido/retail-store-contact-scraper`) Actor

🏬 Retail Store Contact Scraper collects retail shop records from Google Maps with full address, ZIP, phone and website. 📧 Store sites crawled for emails and socials. 🛍️ Perfect for wholesale suppliers & retail software vendors.

- **URL**: https://apify.com/scrapido/retail-store-contact-scraper.md
- **Developed by:** [Scrapido](https://apify.com/scrapido) (community)
- **Categories:** Lead generation, E-commerce, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### Retail Store Contact Scraper

**Retail Store Contact Scraper** is an Apify actor that automates retail store lead generation by extracting local business contact information (emails, phone numbers, and social links) from publicly available web sources. If you’re a marketer, researcher, or data team trying to move from manual store-by-store research to scalable contact lists, this actor helps you reach better ROI faster.

***

### What is Retail Store Contact Scraper? 🔍

**Retail Store Contact Scraper** is an Apify actor for automated contact scraping focused on retail businesses. It searches for a retail niche (your “search term”) in one or more target locations, then visits business websites to extract email addresses, phone numbers, and social media profiles. This solves the core problem of time-consuming manual research—especially when you need contact details aggregation for outreach at scale. Use it as a retailer website scraping workflow to quickly build B2C retail outreach lists, and export clean results to your CRM or email tool. If you’re looking for a store contact scraper, this is a practical contact finder that helps you generate thousands of leads efficiently.

***

### What Data Does a Retail Store Contact Scraper Collect? 📊

Retail Store Contact Scraper captures the essentials you need for local business contact information: business identity, website and phone details, plus email and social media results gathered from each store’s online presence.

| Data Category | Fields Extracted | Description |
|---|---|---|
| Contact | `scraped_emails` | Email addresses found for the business (publicly available). |
| Identity | `name`, `place_id` | Store/business name and a place identifier for deduping and tracking. |
| Location | `full_address`, `city`, `state`, `zip`, `country_code`, `lat`, `long` | Address and coordinates for geo-aware lead lists. |
| Results Summary | `emails_found`, `pages_scraped`, `scrape_status` | Counts and status of what was collected during the run. |
| Reviews & Quality Signals | `avg_rating`, `total_reviews` | Store rating metrics captured alongside contact details. |
| Communication | `scraped_phones`, `scraped_social_media` | Phone numbers and social media profile links associated with the business. |

***

### What Do Results from Retail Store Contact Scraper Look Like? 👀

Each result is a structured JSON record saved to your Apify dataset. Here’s a real example (matching the dataset output fields and order):

```json
{
  "name": "BrightStar Electronics",
  "website": "https://brightstarelectronics.com",
  "phone": "(305) 555-0148",
  "full_address": "812 Ocean Ave Miami FL 33139 US",
  "city": "Miami",
  "state": "FL",
  "zip": "33139",
  "country_code": "US",
  "scraped_emails": [
    "sales@brightstarelectronics.com",
    "support@brightstarelectronics.com"
  ],
  "scraped_phones": [
    "+13055550148",
    "+13055550149"
  ],
  "scraped_social_media": [
    "https://www.facebook.com/BrightStarElectronics",
    "https://www.instagram.com/brightstarelectronics/"
  ],
  "emails_found": 2,
  "pages_scraped": 7,
  "avg_rating": 4.4,
  "total_reviews": 312,
  "lat": "25.7906543",
  "long": "-80.1300497",
  "place_id": "ChIJq3gJm9qf9ogR0pJkRkZ9sY8",
  "scrape_status": "success"
}
```

Export formats: JSON (default) and CSV via Apify Console.

***

#### Core Features: Retail Store Contact Scraper ⚡

| Feature | Benefit |
|---|---|
| ✅ **Search-term driven targeting** | Use your niche keywords to focus on retail store lead generation instead of random scraping. |
| ✅ **Location-focused discovery** | Provide one or more target locations to build local business contact information at scale. |
| ✅ **Email-first results support** | The actor is designed to work as a retailer contact scraper that concentrates on businesses with contact emails. |
| ✅ **Structured dataset output** | Results land in a consistent table schema—ideal for marketers, analysts, and automation workflows. |
| ✅ **Phone & social extraction** | You get `scraped_phones` and `scraped_social_media` to round out each lead record. |
| ✅ **Review metrics included** | Capture `avg_rating` and `total_reviews` for better lead quality ranking. |
| ✅ **Configurable result caps** | Control volume using `maxBusinesses` (and optional per-location limiting). |
| ✅ **Proxy support** | Built-in proxy support helps keep large web scraping runs stable with fewer disruptions. |
| ✅ **Resilience for real-world web pages** | Includes practical scraping resilience and progress reporting for long runs. |

***

### Getting Started with Retail Store Contact Scraper 🚀

1. **Open Apify Store** — Go to [apify.com/store](https://apify.com/store) and search Retail Store Contact Scraper
2. **Click Try for Free** — Sign in or create a free Apify account
3. **Open the Input Tab** — Configure your scraping parameters
4. **Add your Search Term** — Set the retail niche you want (example: “Retail Store”)
5. **Add Locations** — Provide one or more target locations (example: “New York”)
6. **Set a Result Cap** — Use `maxBusinesses` to control how many stores with emails you want
7. **Configure Proxies (Optional)** — Use the built-in `proxyConfiguration` for larger runs
8. **Start & Monitor Logs** — Watch progress and then open the dataset to export

First results are typically available quickly, and the dataset is structured for easy export and analysis. 🚀

***

### Ways to Use Retail Store Contact Scraper 💡

- 🎯 **Retail store lead generation** — Build B2C retail outreach lists using retailer website scraping results.
- 📣 **Store contact scraping for campaigns** — Create segmented outreach batches by city/state using `full_address`.
- 🤝 **Data enrichment for retail businesses** — Append email and phone data to your existing store or partner databases.
- 🔬 **Business directory data extraction** — Aggregate contact details in a repeatable way for research and reporting.
- 📊 **Name address phone extraction** — Get structured address fields and `scraped_phones` for clean CRM imports.
- ⚙️ **Compliance friendly scraping workflows** — Focus on public web data and use the dataset for legitimate outreach and analysis.

***

#### Input Parameters — Retail Store Contact Scraper

```json
{
  "googleMapsSearchTerm": "Retail Store",
  "googleMapsLocation": ["New York"],
  "maxBusinesses": 5,
  "scrapeMaxBusinessesPerLocation": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| `googleMapsSearchTerm` | string | ✅ Yes | `Retail Store` | Enter the business type or niche for the email scraper (for example, “coffee shops” or “dentists”). |
| `googleMapsLocation` | array | ✅ Yes | `["New York"]` | Target geographic locations for the retail contact scraper (for example, `["Miami, Florida"]` or `["New York"]`). |
| `maxBusinesses` | integer | No | `5` | Target number of businesses to find (1–1000). The scraper stops when this target is reached. |
| `scrapeMaxBusinessesPerLocation` | boolean | No | `false` | If enabled, collect up to `maxBusinesses` results per location. If disabled, combine all locations up to a single total limit. |
| `proxyConfiguration` | object | No | `{ "proxy support": true }` | Proxy settings for scraping. Recommended for large-scale scraping runs. |

***

#### Output Parameters — Retail Store Contact Scraper

```json
{
  "name": "BrightStar Electronics",
  "website": "https://brightstarelectronics.com",
  "phone": "(305) 555-0148",
  "full_address": "812 Ocean Ave Miami FL 33139 US",
  "city": "Miami",
  "state": "FL",
  "zip": "33139",
  "country_code": "US",
  "scraped_emails": [
    "sales@brightstarelectronics.com",
    "support@brightstarelectronics.com"
  ],
  "scraped_phones": [
    "+13055550148",
    "+13055550149"
  ],
  "scraped_social_media": [
    "https://www.facebook.com/BrightStarElectronics",
    "https://www.instagram.com/brightstarelectronics/"
  ],
  "emails_found": 2,
  "pages_scraped": 7,
  "avg_rating": 4.4,
  "total_reviews": 312,
  "lat": "25.7906543",
  "long": "-80.1300497",
  "place_id": "ChIJq3gJm9qf9ogR0pJkRkZ9sY8",
  "scrape_status": "success"
}
```

| Field | Label | Format | Description |
|---|---|---|---|
| `name` | Business Name | text | The retailer/store name captured from the listing data. |
| `website` | Website | link | The business website URL (if available). |
| `phone` | Phone | text | A phone number associated with the business listing. |
| `full_address` | Address | text | Combined address string including street, city, state, zip, and country code (when present). |
| `city` | City | text | City extracted for the lead record. |
| `state` | State | text | State/region extracted for the lead record. |
| `zip` | zip | text | Postal/ZIP code extracted for the lead record. |
| `country_code` | country\_code | text | ISO-style country code captured for the lead record. |
| `scraped_emails` | Emails Found | array | List of email addresses found for the business on its website. |
| `scraped_phones` | Phone Numbers | array | List of phone numbers extracted from the website. |
| `scraped_social_media` | Social Media | array | List of social media profile links extracted from the website. |
| `emails_found` | # Emails | number | Count of how many emails were found for this business. |
| `pages_scraped` | Pages Scraped | number | Number of pages processed for the website scraping step. |
| `avg_rating` | Rating | number | Average rating value associated with the business listing. |
| `total_reviews` | Reviews | number | Total number of reviews associated with the business listing. |
| `lat` | lat | text | Latitude coordinate for the business (as text). |
| `long` | long | text | Longitude coordinate for the business (as text). |
| `place_id` | place\_id | text | Place identifier used to track/dedupe businesses. |
| `scrape_status` | Status | text | Final scrape status such as `success` (or other run outcomes). |

***

### Why Choose This Retail Store Contact Scraper? 🏆

Retail Store Contact Scraper is purpose-built for local business contact information workflows: it targets retail store listings, then extracts emails, phone numbers, and social media profiles from associated websites. You get structured output that’s ready for CRM enrichment, store locator scraper style lead generation, and retailer websites scraping projects. Built-in proxy support helps reliability for larger runs, and the dataset schema is consistent so analysts can join and analyze results easily. It’s also cost-efficient via capped run limits and pay-per-result pricing—especially when you know your target store volume.

***

### How Many Results Can You Scrape? 📈

Use `maxBusinesses` to set a clear cap (1–1000). Output volume depends on how many discovered businesses have contact details available for extraction, and on the number of websites that can be processed successfully. For higher-volume projects, use `proxyConfiguration` and consider multiple locations. Your results are stored in the Apify dataset and can be exported anytime.

***

### Legal Guidelines for Scraping Retail Store ⚖️

Retail Store Contact Scraper collects information only from **publicly available sources**. No private accounts or login-protected data is accessed. As with any web scraping for retailer contact scraping and data enrichment for retail businesses, you should follow applicable laws and platform rules (including privacy regulations and anti-spam requirements) and use the data for legitimate purposes. For data removal requests, contact <scrapidocontact@gmail.com>.

***

### FAQ — Retail Store Contact Scraper ❓

#### How does the Retail Store Contact Scraper identify data?

The actor uses your provided retail niche and `googleMapsLocation` inputs to find relevant retail businesses, then scrapes business websites to extract contact information that is publicly available there.

#### What business types can I scrape with this actor?

You can use `googleMapsSearchTerm` to target the retail niche you care about (for example, a general term like “Retail Store” or a more specific category). The actor is designed for retail store lead generation and extracting local store contact information.

#### Do I get emails and phone numbers every time?

No. Not every business website publicly lists emails or complete contact details, so results vary by niche and by the availability of contact pages. The dataset includes `scraped_emails`, `scraped_phones`, and `scrape_status` so you can assess coverage.

#### How should I choose my `maxBusinesses` value?

Start small (like the default `5`) to validate yield for your niche and location(s). Then increase `maxBusinesses` once you confirm the `emails_found` and `scraped_emails` quality matches your outreach needs.

#### Can I limit how many results I get per location?

Yes. Toggle `scrapeMaxBusinessesPerLocation`. If it’s enabled, the actor aims for up to `maxBusinesses` results per location. If it’s disabled, it combines all locations into a single overall total limit.

#### Is proxy support included?

Yes. The `proxyConfiguration` input supports proxy settings, and the default is `proxy support: true`. This is recommended for more reliable scraping at larger scales, especially when running multiple locations.

#### How do I get help or request improvements?

For support, feedback, or feature requests, contact <scrapidocontact@gmail.com>.

***

### Conclusion 🏁

Retail Store Contact Scraper streamlines store contact scraping for marketers and analysts who need local business contact information—fast. Use it to assemble outreach-ready B2C retail outreach lists with emails, phone numbers, and social links, all in a clean Apify dataset schema.

### Multiple Email Type

**Email Types** keeps only the kinds of mailbox you want. Every row records what
it was classified as in `emailType`.

| Type | What it matches |
| --- | --- |
| Personal | Free webmail (Gmail, Outlook, Yahoo, iCloud, ...) |
| Business | Company domains — free webmail and institutions excluded |
| Education | `.edu`, `.ac.uk`, `.edu.au` and other academic suffixes |
| Government | `.gov`, `.mil`, `.gov.uk`, `.gc.ca`, ... |
| Non-profit | `.org`, `.ngo`, `.org.uk`, ... |

A business found with no email at all is unaffected — whether those rows are
wanted is already governed by the existing email-only setting.

### Multiple Phone Type

**Phone Types** does the same for numbers, checked against the line's *real*
type rather than a guess. Numbers on ranges where mobile and landline cannot be
told apart are kept rather than dropped, since discarding them would lose good
leads.

### Outreach links

| Field | Meaning |
| --- | --- |
| `telLink` | A clickable `tel:` link for the primary number |
| `whatsappLink` | A `wa.me` chat link, or empty for a landline or an invalid number |
| `whatsappCapable` | Whether the line could support WhatsApp |
| `phoneContacts` | Every kept number with its own type, links and validity |

`whatsappCapable` never claims the person uses WhatsApp — only that the number
is of a kind that could. Turn the links off with **Include WhatsApp links**; the
capability flag is still reported.

# Actor input Schema

## `googleMapsSearchTerm` (type: `string`):

Enter the business type or niche for email scraper (e.g., 'coffee shops', 'dentists').

## `googleMapsLocation` (type: `array`):

Target geographic location for the email scraper (e.g., 'Miami, Florida').

## `maxBusinesses` (type: `integer`):

Target number of businesses to find (1-1000). The scraper will stop when this target is reached.

## `scrapeMaxBusinessesPerLocation` (type: `boolean`):

If enabled, the scraper will collect up to `maxBusinesses` results per location. If disabled, it combines all locations up to a single total limit.

## `validateEmails` (type: `boolean`):

Run DNS/MX validation and confidence scoring on every email found, and include the results (confidence score, validation status, role-based/catch-all flags) in the output.

## `minRating` (type: `integer`):

Skip businesses rated below this (1-5 stars). Leave at 0 for no filter.

## `minReviews` (type: `integer`):

Skip businesses with fewer than this many Google reviews. Leave at 0 for no filter.

## `requireWebsite` (type: `boolean`):

Skip businesses with no website listed on Google Maps (they can't be crawled for contact info anyway).

## `leadMode` (type: `string`):

Business Contacts (default) returns the business's generic contact info (info@, main phone, socials). Decision-Maker Finder instead looks for a named person with a job title (e.g. "Jane Smith, Owner") on the business's team/about pages — a best-effort heuristic, not guaranteed on every site.

## `proxyConfiguration` (type: `object`):

Proxy settings for scraping. Recommended for large-scale scraping.

## `emailTypes` (type: `array`):

Which kinds of mailbox to keep. Pick as many as you like; leave empty for every type. A business with no email at all is unaffected by this - whether those rows are wanted is governed by the existing email-only setting.

## `phoneTypes` (type: `array`):

Which kinds of line to keep. Leave empty for every type. Numbers on ranges where mobile and landline cannot be told apart are always kept rather than silently dropped.

## `includeWhatsappLinks` (type: `boolean`):

Add a ready-made wa.me chat link for numbers on a line WhatsApp can run on. The link means the number is in a form WhatsApp accepts - not proof that an account exists.

## Actor input object example

```json
{
  "googleMapsSearchTerm": "Retail Store",
  "googleMapsLocation": [
    "New York"
  ],
  "maxBusinesses": 5,
  "scrapeMaxBusinessesPerLocation": false,
  "validateEmails": false,
  "minRating": 0,
  "minReviews": 0,
  "requireWebsite": false,
  "leadMode": "Business Contacts",
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "emailTypes": [
    "Business"
  ],
  "phoneTypes": [
    "Mobile",
    "Landline"
  ],
  "includeWhatsappLinks": true
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "googleMapsSearchTerm": "Retail Store",
    "googleMapsLocation": [
        "New York"
    ],
    "maxBusinesses": 5,
    "proxyConfiguration": {
        "useApifyProxy": true
    },
    "emailTypes": [
        "Business"
    ],
    "phoneTypes": [
        "Mobile",
        "Landline"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapido/retail-store-contact-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "googleMapsSearchTerm": "Retail Store",
    "googleMapsLocation": ["New York"],
    "maxBusinesses": 5,
    "proxyConfiguration": { "useApifyProxy": True },
    "emailTypes": ["Business"],
    "phoneTypes": [
        "Mobile",
        "Landline",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("scrapido/retail-store-contact-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "googleMapsSearchTerm": "Retail Store",
  "googleMapsLocation": [
    "New York"
  ],
  "maxBusinesses": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "emailTypes": [
    "Business"
  ],
  "phoneTypes": [
    "Mobile",
    "Landline"
  ]
}' |
apify call scrapido/retail-store-contact-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapido/retail-store-contact-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/hRRO1vmrxvBHjKkaK/builds/JumO8hNbp01Z69sGz/openapi.json
