# Judge.me Store & Contact Scraper (`scraping_crew/judgeme-store-contact-scraper`) Actor

Extract the Judge.me verified store directory as structured data — shop name, website, platform, country, rating, review and product counts, plus emails, phone numbers, physical address and social profiles for each store.

- **URL**: https://apify.com/scraping\_crew/judgeme-store-contact-scraper.md
- **Developed by:** [Scraping Crew](https://apify.com/scraping_crew) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Judge.me Store Directory & Contact Scraper

**Judge.me** ([judge.me](https://judge.me)) hosts one of the largest public directories of **verified e-commerce stores** — tens of thousands of Shopify, WooCommerce and BigCommerce shops with real customer-review histories. This Actor turns that directory into a clean, structured **B2B contact and lead database**: shop name, website, platform, country, average rating, review and product counts, plus **email addresses, phone numbers, physical address, contact page and every social profile** for each store. Run it on the [Apify platform](https://apify.com) for API access, scheduling, integrations, proxy rotation and run monitoring out of the box.

Try it by clicking **Start** with the defaults — you get your first stores in under a minute. Raise **Max items** when you want the whole directory.

### Features

- 🏪 Tens of thousands of verified, actively-reviewed e-commerce stores
- 📧 Contact email addresses for each store *(paid plans)*
- ☎️ Phone numbers where the store publishes them *(paid plans)*
- 📍 Physical business address and country
- 🔗 Instagram, Facebook, Twitter/X, TikTok, Pinterest, YouTube and LinkedIn profiles
- ⭐ Average rating, total review count and product count
- 🛒 E-commerce platform each store runs on (Shopify, WooCommerce, and more)
- 🏅 Store awards and trust medals
- 🔄 Resume long runs where they left off — no store is collected twice
- 🎯 `maxItems` control for quick, cheap test runs
- 📊 Export as JSON, CSV, Excel, or via API
- 🤖 Ready for AI, n8n, Zapier, Make and RAG workflows
- 🌐 Apify Proxy support for reliable large runs

### Why use Judge.me Store Directory & Contact Scraper?

Every record is a **qualified e-commerce lead**: a real store, with a real website, a known platform, a public review track record and a way to reach it. That makes this Actor a fit for:

- **B2B lead generation** — build outreach lists of stores on a specific platform, in a specific country, above a review threshold.
- **Agency and SaaS prospecting** — find shops big enough to need your app, plugin, fulfilment or marketing service.
- **Market and competitor research** — size up a vertical by counting stores, ratings and catalog sizes.
- **Influencer and partnership sourcing** — reach store owners through the social profiles collected alongside their email.
- **CRM enrichment** — attach ratings, platform, address and socials to domains you already track.

### How to use Judge.me Store Directory & Contact Scraper

1. Open the Actor and go to the **Input** tab.
2. Set **Max items** — start with the default `10` for a test, then raise it (or set `0` for unlimited) once you like the data.
3. (Optional) Set **Max directory pages** to limit how much of the directory is read (24 stores per page).
4. (Optional) Turn off **Collect emails and phone numbers** for a much faster, cheaper run that still returns every other field. On free plans this step is skipped automatically.
5. (Optional) Leave **Resume previous runs** on so repeat runs skip stores you already have.
6. (Optional) Enable **Apify Proxy** — recommended for anything beyond a small test run.
7. Click **Start**. When the run finishes, open the **Dataset** tab to preview and export.

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `maxItems` | integer | `10` | Stop after N stores. `0` = unlimited. |
| `maxPages` | integer | `0` | Directory pages to read (24 stores each). `0` = all. |
| `concurrency` | integer | `8` | How many stores to process at once. Higher is faster, uses more memory. |
| `extractSiteContacts` | boolean | `true` | Collect email + phone from each store's own site. **Paid plans only.** Off = faster and cheaper. |
| `resume` | boolean | `true` | Skip stores already collected in earlier runs (paid plans). |
| `proxyConfiguration` | object | Apify Proxy | Proxy settings used for the run. |

All fields have sensible defaults, so you can run the Actor without changing anything — open the **Input** tab and press **Start**.

### Output

Each dataset item is one store. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

```json
{
    "shopName": "PersonalFury",
    "websiteUrl": "https://personalfury.com",
    "shopDomain": "vvgears.myshopify.com",
    "platform": "shopify",
    "country": "SG",
    "averageRating": 4.83,
    "numberOfReviews": 53978,
    "productsCount": 2752,
    "medals": ["Diamond Verified Reviews Shop", "Top 100 Shops"],
    "judgemeProfileUrl": "https://judge.me/reviews/personalfury.com",
    "emails": ["support@personalfury.com"],
    "phones": ["+65 6789 1234"],
    "contactPageUrl": "https://personalfury.com/pages/contact-us",
    "address": "68 Circular Road, 02-01, Singapore, 049422, SG",
    "socialInstagram": "https://www.instagram.com/personal_fury",
    "socialFacebook": "https://www.facebook.com/furycreation",
    "socialTiktok": "https://www.tiktok.com/@personalfury",
    "socialYoutube": "https://www.youtube.com/@personalfury",
    "encodedShopId": "zDaRqN2y",
    "reviewSiteSlug": "personalfury.com"
}
```

### Data table

| Field | Type | Description |
|---|---|---|
| `shopName` | string | Store name. |
| `websiteUrl` | string | The store's own website (tracking parameters removed). |
| `shopDomain` | string | Canonical shop domain. |
| `platform` | string | E-commerce platform (e.g. `shopify`). |
| `country` | string | Two-letter country code. |
| `averageRating` | number | Average customer review rating. |
| `numberOfReviews` | integer | Total customer reviews. |
| `productsCount` | integer | Products listed by the store. |
| `description` | string | Store description. |
| `medals` | array | Award / trust medal titles. |
| `judgemeProfileUrl` | string | Public review-profile URL. |
| `emails` | array | Contact email addresses. |
| `phones` | array | Contact phone numbers (best-effort — verify before dialling). |
| `contactPageUrl` | string | The store's contact page. |
| `address` | string | Physical business address. |
| `socialInstagram` … `socialLinkedin` | string | Social profile URLs (7 networks). |
| `contactNote` | string | Notes about contact extraction. |
| `encodedShopId` | string | Stable store identifier. |
| `reviewSiteSlug` | string | Slug of the store's review profile. |

### How much does it cost to scrape the Judge.me store directory?

Cost scales with **how many stores you collect**, not with how long the directory is. Two controls decide almost everything:

- **`maxItems`** caps the run exactly. A 100-store run is roughly a tenth the cost of a 1,000-store one.
- **`extractSiteContacts`** is the big lever. Leaving it on looks up each store's email and phone; turning it off removes that work entirely and makes a run several times cheaper and faster — you still get name, website, platform, country, ratings, address, contact page and all socials.

#### You pay for contacts you actually get

Contact lookup is billed per **result**, not per attempt. Every store that comes back with an email and/or a phone number counts as **one `extracted-contact` event** — the same whether it yields an email, a phone, or both, and no matter how many addresses it publishes. A store with no reachable contact details costs you nothing extra, and a store dropped by your `maxItems` cap is never billed.

Keep `extractSiteContacts` off and you are never charged for contacts at all. Start with the default `maxItems: 10` to gauge cost on your own plan before scaling up.

### Free User Limitations

Free-plan runs are limited as follows:

- **No email or phone collection.** The `extractSiteContacts` option is ignored — `emails` and `phones` come back empty. Every other field is still collected in full.
- **Capped at 10 stores per run** and 1 directory page, regardless of the `maxItems` / `maxPages` values you set.
- **No cross-run resume.** The `resume` option is ignored — every free run starts fresh and may re-collect stores you already have.

Free users still receive the complete core record for every store they collect: name, website, shop domain, platform, country, average rating, review and product counts, description, medals, physical address, contact page URL and all seven social profiles. Upgrade to a paid plan for email and phone numbers, uncapped runs and a persistent resume checkpoint.

### Tips and advanced options

- **Start small.** Run with `maxItems: 10` first, check the fields you care about, then scale.
- **Turn off `extractSiteContacts`** when you only need the store list, ratings, address and socials — it is dramatically faster, and no contact events are billed.
- **Use `maxPages` to sample.** The directory is ordered, so a small `maxPages` gives you the most-reviewed stores first.
- **Leave `resume` on for big jobs.** Split a full directory sweep across several scheduled runs; each one picks up where the last stopped instead of repeating work.
- **Tune `concurrency`.** `8` is a safe default. Raise it for speed if your runs have plenty of memory; lower it if you see failures.
- **Enable Apify Proxy** for any sizeable run — many store sites block repeated requests from a single address.

### FAQ

**Are the phone numbers reliable?**
Emails and social profiles are highly reliable. Phone numbers are **best-effort**: many stores render them with scripts or images, and some pages contain number-like text that resembles a phone. Treat `phones` as needing a quick manual check before use, and read `contactNote` — it tells you when no phone could be found.

**Why do some stores have no email?**
On a free plan, email and phone collection is off — upgrade to a paid plan to enable it. On a paid plan, some shops publish contact details only behind a JavaScript form or a protected page; those stores still appear in the dataset with everything else filled in, `contactNote` records why contact data was unavailable, **and no contact event is billed for them**.

**Can I schedule this?**
Yes. Combine Apify Schedules with `resume` enabled to sweep the directory incrementally — for example a nightly run that continues where the previous one stopped.

**Is scraping this data legal?**
This Actor collects only publicly available business information from a public store directory and from stores' own public websites — the kind of data businesses publish specifically so customers can reach them. You are responsible for using it in line with the target sites' terms and with applicable law, including GDPR/CCPA where business contact data may be in scope. Do not use the output for spam or any purpose that violates anti-spam regulations.

**Something is missing or wrong.**
Open the **Issues** tab on the Actor page — bug reports and feature requests are welcome. Custom scraping solutions are available on request.

**Disclaimer:** This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Judge.me or any of its subsidiaries. All trademarks mentioned are the property of their respective owners.

### SEO Keywords

judge.me scraper, judge me store scraper, shopify store list, shopify store directory, ecommerce store database, ecommerce lead generation, b2b lead scraper, shopify lead generation, store contact scraper, email scraper, business email finder, phone number scraper, shopify store emails, ecommerce contact database, online store directory scraper, shopify prospecting, dropshipping store finder, competitor research tool, ecommerce market research, store social media profiles, instagram profile finder, shop owner contact details, verified store reviews, review platform scraper, woocommerce store list, bigcommerce store list, ecommerce prospect list, agency lead list, saas lead generation, crm enrichment data, shopify apps prospecting, ecommerce sales leads, merchant directory scraper, apify actor, no code web scraping

# Actor input Schema

## `maxItems` (type: `integer`):

Stop the run after this many stores have been collected. Set to 0 for unlimited (free plans are capped, see the README).

## `maxPages` (type: `integer`):

How many store-directory pages to read (24 stores per page, ~417 pages in total). Set to 0 to read them all.

## `concurrency` (type: `integer`):

How many stores to process at the same time. Higher is faster but uses more memory.

## `extractSiteContacts` (type: `boolean`):

Visit each store's own website to collect its email address and phone number. Available on paid plans — free runs return every other field instead. Each store that yields an email and/or a phone is billed as one extracted-contact event. Turn off for a much faster, cheaper run.

## `resume` (type: `boolean`):

Skip stores that were already collected in earlier runs and carry them into this run's results. Available on paid plans.

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

Proxy servers used by the scraper to avoid blocking. Apify Proxy is strongly recommended — store websites frequently block datacenter traffic.

## Actor input object example

```json
{
  "maxItems": 10,
  "maxPages": 0,
  "concurrency": 8,
  "extractSiteContacts": true,
  "resume": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

One record per store: profile details, ratings, contact data and social profiles collected during the run.

# 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 = {
    "maxItems": 10,
    "maxPages": 0,
    "concurrency": 8,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scraping_crew/judgeme-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 = {
    "maxItems": 10,
    "maxPages": 0,
    "concurrency": 8,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("scraping_crew/judgeme-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 '{
  "maxItems": 10,
  "maxPages": 0,
  "concurrency": 8,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call scraping_crew/judgeme-store-contact-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scraping_crew/judgeme-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/LtkVKAc6EbSw3moPl/builds/wZvvXAHnEuw4W3xSb/openapi.json
