# Lowe's Seller Email Scraper (`leads-scraper/lowes-seller-email-scraper`) Actor

Lowe's Seller Email Scraper SD - Lowe's Seller Email Scraper is a lead generation tool that extracts leads with public contact emails, account names and profile URLs from Lowe's results by keyword, location and email domain - Lowe's email extractor.

- **URL**: https://apify.com/leads-scraper/lowes-seller-email-scraper.md
- **Developed by:** [Leads Scraper](https://apify.com/leads-scraper) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.49 / 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.
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

### Lowe's Seller Email Scraper

The **Lowe's Seller Email Scraper** collects publicly indexed contact emails that sit alongside Lowe's brand, supplier and product pages in Google's search index, and writes them into a clean, deduplicated Apify dataset.

The honest framing first. Lowes.com is a **first-party retailer**, not an open marketplace like Amazon or eBay.

Lowe's does not publish an inbox for every merchant on its site, so the **Lowe's Seller Email Scraper** does not return marketplace-seller mailboxes. What it realistically finds are **supplier, brand, vendor-relations and press contacts published on Lowe's own pages**, plus the manufacturer and brand pages for the home-improvement products the chain stocks.

Identity data is mixed. In live testing, **4 of 9 sampled result blocks carried a usable handle** — better than Home Depot, weaker than Target.

So expect roughly half your rows to arrive with `username` and `profileUrl` populated, and the rest to carry an email plus a brand or product name only.

Read as a **vendor-relations and supplier-research tool**, the Lowe's Seller Email Scraper is genuinely useful. It helps you work out who to approach about becoming a Lowe's supplier, which manufacturers hold shelf space in a category, and how the assortment compares with the competition.

#### What the Lowe's Seller Email Scraper actually does

The Lowe's Seller Email Scraper builds Google queries with the `site:` operator against `lowes.com`, fetches the result pages through the Apify **GOOGLE\_SERP** proxy, and extracts every email matching your chosen domains.

It parses each result block structurally — locating the `<h3>` title, then the smallest surrounding block — instead of depending on Google's CSS class names, which change often.

Every email is lower-cased, normalised, junk-filtered and globally deduplicated before the lead is pushed to the dataset.

#### What the Lowe's Seller Email Scraper does not do

It does **not** log into Lowe's, use any Lowe's API, open lowes.com in a browser, render JavaScript, or use cookies or authentication. No private data is touched.

Every field comes from publicly indexed Google search results: titles, snippets and site labels. If Google has not indexed it, the Lowe's Seller Email Scraper cannot return it.

### Key features of the Lowe's Seller Email Scraper

Each row below describes behaviour that is actually implemented in the Actor.

| Feature | What it means in practice |
|---|---|
| Google `site:` targeting | Queries are scoped to `lowes.com`, keeping results on the retailer's own pages |
| Query expansion | Base, quoted and `intitle:` phrasings plus one variant per query modifier; base queries run first |
| Domain filtering | Only emails on the domains you list survive (`@gmail.com` and `@yahoo.com` by default) |
| Global deduplication | Each unique email is emitted once across every query and page in the run |
| Email normalisation | Handles `name [at] domain [dot] com`, `name (at) domain`, `name @ domain.com`, `domain .com`, zero-width characters and the full-width `＠` |
| Junk filter | Rejects placeholders such as `email@`, `yourname@`, `test@`, `xxx@` and single-character locals |
| Boundary-correct matching | `@gmail.com` will not match inside `@gmail.company` or `@gmail.com.br` |
| Soft-wrap repair | Drops a hit that is only the tail of another email in the same block |
| Async concurrency | An `asyncio` worker pool with a shared stop signal once `maxEmails` is reached |
| Retries and backoff | Up to 3 attempts per page, exponential backoff, a fresh proxy session per request |
| Block detection | CAPTCHA, "unusual traffic" and consent pages are detected and retried, not counted as empty |
| Re-queueing | Blocked or failed queries are retried once at the end of the run |
| Resumable state | Run state lives in the key-value store keyed by an input hash, saved on `PERSIST_STATE`, `MIGRATING` and `ABORTING` |
| Fallback parser | If Google's markup changes, the run degrades to "emails without account details" rather than "no emails" |
| Run summary | Logs pages fetched, blocked pages, retries and emails per page |

### How the Lowe's Seller Email Scraper works

The pipeline is short and deliberately transparent.

1. **Read input** — keywords, optional location, email domains and limits.
2. **Build queries** — combine each keyword with each domain using `site:lowes.com`, expanding into several phrasings when `expandQueries` is on.
3. **Fetch pages** — request Google result pages asynchronously through the Apify GOOGLE\_SERP proxy with `aiohttp`.
4. **Parse blocks** — locate each `<h3>` and the smallest block around it to recover title, label and snippet.
5. **Extract emails** — apply a domain-filtered regex to the block text.
6. **Deduplicate and push** — emit each new lead immediately, so partial results survive an abort.

Google caps a single query at roughly 300 results, which is exactly why query expansion exists inside the Lowe's Seller Email Scraper.

### Input reference for the Lowe's Seller Email Scraper

| Field | Type | Default | Meaning |
|---|---|---|---|
| `keywords` | array (required) | `["supplier", "brand"]` | Search terms describing what you want (niche, job title, industry) |
| `location` | string | `""` | Optional location phrase added to every query |
| `customDomains` | array | `["@gmail.com","@yahoo.com"]` | Only emails on these domains are kept; the leading `@` is optional |
| `maxEmails` | integer 1-10000 | `20` | Stop after this many unique emails |
| `countryCode` | string | `""` | Two-letter country for the search proxy (US, GB, DE...) |
| `expandQueries` | boolean | `true` | Search each keyword x domain pair in several phrasings |
| `queryModifiers` | array | `["email","contact","wholesale","customer service","inquiries"]` | Extra words combined with each keyword when expansion is on |
| `maxPagesPerQuery` | integer 1-50 | `30` | Page cap per query |
| `maxConcurrency` | integer 1-20 | `5` | Parallel queries |

#### Example input for the Lowe's Seller Email Scraper

A home-improvement sourcing run aimed at brand and vendor pages rather than shopper support:

```json
{
  "keywords": ["supplier", "brand", "appliance manufacturer", "building products"],
  "location": "Charlotte",
  "customDomains": ["@gmail.com", "@yahoo.com", "@outlook.com"],
  "maxEmails": 200,
  "countryCode": "US",
  "expandQueries": true,
  "queryModifiers": ["email", "contact", "wholesale", "customer service", "inquiries"],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

Adding corporate domains to `customDomains` is the highest-impact tuning step, since manufacturer and vendor-relations contacts in home improvement rarely use free webmail.

### Output reference for the Lowe's Seller Email Scraper

Every dataset item produced by the Lowe's Seller Email Scraper carries all fourteen fields below.

| Field | Meaning |
|---|---|
| `network` | Platform name |
| `keyword` | The keyword that produced the lead |
| `query` | The exact Google query used |
| `title` | Raw result title |
| `accountName` | Account label Google prints (handle or display name) |
| `fullName` | Display name parsed from a profile-style title; empty for non-profile results |
| `username` | URL-safe handle when the platform exposes one; otherwise `null` |
| `profileUrl` | Canonical account URL when a handle is known; otherwise empty |
| `url` | Direct platform link when exposed, else the profile URL |
| `description` | Bio or snippet text, cleaned of labels and counters |
| `email` | Lower-cased email address |
| `emailDomain` | The matched domain (e.g. `@gmail.com`) |
| `possiblyTruncated` | `true` when Google's snippet ellipsis touched the email — verify before sending |
| `foundAt` | ISO 8601 UTC timestamp |

#### Example output from the Lowe's Seller Email Scraper

The mix below reflects the real split — one row with a handle, one without.

```json
[
  {
    "network": "Lowe's",
    "keyword": "brand",
    "query": "site:lowes.com brand contact \"@gmail.com\"",
    "title": "Stonecreek Fixtures at Lowe's",
    "accountName": "stonecreek-fixtures",
    "fullName": "Stonecreek Fixtures",
    "username": "stonecreek-fixtures",
    "profileUrl": "https://www.lowes.com/brand/stonecreek-fixtures",
    "url": "https://www.lowes.com/brand/stonecreek-fixtures",
    "description": "Shop Stonecreek Fixtures at Lowe's. Dealer and wholesale enquiries: stonecreek.trade@gmail.com",
    "email": "stonecreek.trade@gmail.com",
    "emailDomain": "@gmail.com",
    "possiblyTruncated": false,
    "foundAt": "2026-08-31T10:21:44.902Z"
  },
  {
    "network": "Lowe's",
    "keyword": "supplier",
    "query": "site:lowes.com supplier wholesale \"@yahoo.com\"",
    "title": "Baywood Millwork Interior Doors - Lowe's",
    "accountName": "Baywood Millwork",
    "fullName": "",
    "username": null,
    "profileUrl": "",
    "url": "https://www.lowes.com/pd/baywood-millwork-interior-door",
    "description": "Baywood Millwork interior doors. Supplier and press enquiries baywood.supply@yahoo.com ...",
    "email": "baywood.supply@yahoo.com",
    "emailDomain": "@yahoo.com",
    "possiblyTruncated": true,
    "foundAt": "2026-08-31T10:22:16.338Z"
  }
]
```

When a handle is exposed, `profileUrl` follows the `https://www.lowes.com/brand/{username}` shape. When it is not, `accountName` is your identifier.

### Use cases for the Lowe's Seller Email Scraper

| Use case | How the Lowe's Seller Email Scraper helps |
|---|---|
| Supplier research | Identify who to contact about becoming a Lowe's supplier, starting from published vendor contacts |
| Assortment tracking | Build a list of the brands Lowe's stocks in a home-improvement category |
| Competitive analysis | Compare Lowe's brand mix directly against Home Depot's in the same category |
| Manufacturer outreach | Reach the makers behind stocked products about distribution or co-marketing |
| Private-label research | See which categories lean on national brands and which look open to own-brand supply |
| Press and PR | Surface publicly listed press and communications contacts attached to brand pages |
| Distributor prospecting | Find brands with retail presence that may still need regional distribution coverage |
| Pro-channel mapping | Understand which contractor-facing niches are crowded and which are thin |

All of these are **research** workflows first, outreach workflows second. The Lowe's Seller Email Scraper is at its best when the dataset is read as an assortment map.

#### Home-improvement vendor relations

If your goal is a Lowe's vendor-relations conversation, the official route runs through the retailer's own supplier registration process — not a cold email. The Lowe's Seller Email Scraper supports that by showing which manufacturers already hold your category.

Walking into that conversation with the current brand line-up in hand is worth more than a generic pitch deck.

#### Head-to-head category comparison

The most valuable pattern is running the Lowe's Seller Email Scraper and its Home Depot counterpart on the same keyword set, then diffing `accountName` between the two datasets.

Brands present at one chain and absent at the other are the most interesting rows in the whole exercise.

Procurement analysts, category managers and distributors get more out of the Lowe's Seller Email Scraper than a volume-led sales team would, because the dataset is small, specific and category-shaped.

### Worked examples with the Lowe's Seller Email Scraper

**Appliances sweep.** Keywords `["appliance brand", "refrigerator manufacturer", "laundry supplier"]`, `maxEmails: 300`, expansion on.

**Outdoor and garden.** Keywords `["outdoor power equipment brand", "patio furniture supplier", "garden tool manufacturer"]` with `countryCode: "US"`.

**Millwork, flooring and interiors.** Keywords `["flooring supplier", "millwork manufacturer", "interior door brand"]` plus your prospects' corporate domains.

**Press and partnership pass.** Keywords `["press", "media inquiries", "partnerships"]`, `maxEmails: 100`. Low volume from the Lowe's Seller Email Scraper, but the contacts that do surface are usually the right ones.

### Expected yield: what the Lowe's Seller Email Scraper realistically returns

Expect a modest dataset with partial identity coverage. In testing, **4 of 9 sampled blocks carried a handle**, so roughly half of your rows will have a usable `profileUrl`.

Email volume is bounded by what Google has indexed on a first-party retailer's site, which is far less than a marketplace publishes. The [Amazon Email Scraper](https://apify.com/leads-scraper/amazon-email-scraper) and the [eBay Email Scraper](https://apify.com/leads-scraper/ebay-email-scraper) will each return many times more rows for the same effort.

For supplier discovery at real volume, run the [Faire Email Scraper](https://apify.com/leads-scraper/faire-email-scraper) alongside this one — Faire is a genuine wholesale marketplace and behaves like one.

### Limitations of the Lowe's Seller Email Scraper

- **Lowe's is a first-party retailer.** This Actor finds supplier and brand contacts published on its pages rather than marketplace-seller inboxes. It cannot extract contact details the retailer never publishes.
- Only accounts whose email is **publicly visible in Google's index** can be found. No private data is accessed.
- Google caps a single query at roughly **300 results** — the reason query expansion exists. Leave `expandQueries` on.
- `possiblyTruncated: true` means Google's snippet ellipsis touched the address; verify before sending.
- The Actor **requires the Apify GOOGLE\_SERP proxy** and cannot run without Apify proxy credentials.
- **Free Apify plans are capped at 100 emails per run.** Paid plans are uncapped.
- `username` and `profileUrl` are populated only when Google exposes a handle — roughly half the time on lowes.com. Empty handles are a Google limitation, not a bug.
- Results vary with keywords, domains and location. No volume is guaranteed.

### Responsible use: GDPR and CAN-SPAM

The Lowe's Seller Email Scraper only collects addresses that are already published publicly. That does not, on its own, make every downstream use lawful.

Under **GDPR**, a business email that identifies a person is personal data. You need a lawful basis, you must honour access and erasure requests, and you should be able to say where you got the address.

Under **CAN-SPAM**, commercial email needs accurate headers, a valid physical postal address and a working unsubscribe that you action promptly.

In practice: keep outreach relevant to the recipient's role, suppress opt-outs immediately, never resell scraped lists, and verify `possiblyTruncated` rows before contact.

### Tips for better results from the Lowe's Seller Email Scraper

Add corporate domains. Home-improvement vendor contacts are overwhelmingly on company domains rather than free webmail.

Use specific product-category keywords. `"outdoor power equipment brand"` beats the generic default `"brand"` comfortably.

Raise `maxPagesPerQuery` before `maxConcurrency`. Depth is more productive than parallelism and gentler on the proxy.

Schedule the Lowe's Seller Email Scraper with a stable input — the resumable state in the key-value store means a mid-run migration will not cost you what has already been collected.

Because the Lowe's Seller Email Scraper records the exact `query` on every row, you can audit which phrasing produced which contact and tune the next run from evidence.

### Related Actors

| Actor | What it collects |
|---|---|
| [Lowe's Email and Phone Number Scraper](https://apify.com/leads-scraper/lowes-seller-email-and-phone-number-scraper) | Emails and phone numbers from Lowe's |
| [Lowe's Phone Number Scraper](https://apify.com/leads-scraper/lowes-seller-phone-number-scraper) | Public phone numbers from Lowe's |
| [AliExpress Email Scraper](https://apify.com/neuro-scraper/aliexpress-email-scraper) | Public contact emails from AliExpress |
| [Allegro Email Scraper](https://apify.com/neuro-scraper/allegro-email-scraper) | Public contact emails from Allegro |
| [Amazon Email Scraper](https://apify.com/leads-scraper/amazon-email-scraper) | Public contact emails from Amazon |
| [Best Buy Seller Email Scraper](https://apify.com/leads-scraper/best-buy-seller-email-scraper) | Public contact emails from Best Buy |
| [BigCommerce Store Email Scraper](https://apify.com/neuro-scraper/bigcommerce-store-email-scraper) | Public contact emails from BigCommerce Store |
| [Cdiscount Email Scraper](https://apify.com/neuro-scraper/cdiscount-email-scraper) | Public contact emails from Cdiscount |
| [Coupang Email Scraper](https://apify.com/neuro-scraper/coupang-email-scraper) | Public contact emails from Coupang |
| [Depop Email Scraper](https://apify.com/leads-scraper/depop-email-scraper) | Public contact emails from Depop |
| [DHgate Email Scraper](https://apify.com/neuro-scraper/dhgate-email-scraper) | Public contact emails from DHgate |
| [eBay Email Scraper](https://apify.com/leads-scraper/ebay-email-scraper) | Public contact emails from eBay |
| [Ecwid Store Email Scraper](https://apify.com/neuro-scraper/ecwid-store-email-scraper) | Public contact emails from Ecwid Store |
| [Etsy Email Scraper](https://apify.com/leads-scraper/etsy-email-scraper) | Public contact emails from Etsy |
| [Faire Email Scraper](https://apify.com/leads-scraper/faire-email-scraper) | Public contact emails from Faire |
| [Flipkart Email Scraper](https://apify.com/leads-scraper/flipkart-email-scraper) | Public contact emails from Flipkart |
| [Home Depot Seller Email Scraper](https://apify.com/leads-scraper/home-depot-seller-email-scraper) | Public contact emails from Home Depot |
| [JD.com Email Scraper](https://apify.com/leads-scraper/jd-com-email-scraper) | Public contact emails from JD.com |
| [Lazada Email Scraper](https://apify.com/neuro-scraper/lazada-email-scraper) | Public contact emails from Lazada |
| [MercadoLibre Email Scraper](https://apify.com/neuro-scraper/mercadolibre-email-scraper) | Public contact emails from MercadoLibre |
| [Mercari Email Scraper](https://apify.com/neuro-scraper/mercari-email-scraper) | Public contact emails from Mercari |
| [Newegg Email Scraper](https://apify.com/leads-scraper/newegg-email-scraper) | Public contact emails from Newegg |
| [Otto Email Scraper](https://apify.com/leads-scraper/otto-email-scraper) | Public contact emails from Otto |
| [Overstock Email Scraper](https://apify.com/leads-scraper/overstock-email-scraper) | Public contact emails from Overstock |
| [Poshmark Email Scraper](https://apify.com/leads-scraper/poshmark-email-scraper) | Public contact emails from Poshmark |
| [Rakuten Email Scraper](https://apify.com/neuro-scraper/rakuten-email-scraper) | Public contact emails from Rakuten |
| [Shopee Email Scraper](https://apify.com/leads-scraper/shopee-email-scraper) | Public contact emails from Shopee |
| [Shopify Store Email Scraper](https://apify.com/leads-scraper/shopify-store-email-scraper) | Public contact emails from Shopify Store |
| [Taobao Email Scraper](https://apify.com/leads-scraper/taobao-email-scraper) | Public contact emails from Taobao |
| [Target Seller Email Scraper](https://apify.com/neuro-scraper/target-seller-email-scraper) | Public contact emails from Target |
| [Temu Email Scraper](https://apify.com/leads-scraper/temu-email-scraper) | Public contact emails from Temu |
| [Tmall Email Scraper](https://apify.com/leads-scraper/tmall-email-scraper) | Public contact emails from Tmall |
| [Vinted Email Scraper](https://apify.com/leads-scraper/vinted-email-scraper) | Public contact emails from Vinted |
| [Walmart Email Scraper](https://apify.com/leads-scraper/walmart-email-scraper) | Public contact emails from Walmart |
| [Wayfair Email Scraper](https://apify.com/neuro-scraper/wayfair-email-scraper) | Public contact emails from Wayfair |
| [Wish Email Scraper](https://apify.com/leads-scraper/wish-email-scraper) | Public contact emails from Wish |
| [Wix Stores Email Scraper](https://apify.com/leads-scraper/wix-stores-email-scraper) | Public contact emails from Wix Stores |
| [WooCommerce Email Scraper](https://apify.com/neuro-scraper/woocommerce-email-scraper) | Public contact emails from WooCommerce |
| [Zalando Email Scraper](https://apify.com/leads-scraper/zalando-email-scraper) | Public contact emails from Zalando |
| [AliExpress Email and Phone Number Scraper](https://apify.com/neuro-scraper/aliexpress-email-and-phone-number-scraper) | Emails and phone numbers from AliExpress |
| [Allegro Email and Phone Number Scraper](https://apify.com/neuro-scraper/allegro-email-and-phone-number-scraper) | Emails and phone numbers from Allegro |
| [Amazon Email and Phone Number Scraper](https://apify.com/leads-scraper/amazon-email-and-phone-number-scraper) | Emails and phone numbers from Amazon |

### FAQ about the Lowe's Seller Email Scraper

#### How many results should I expect from the Lowe's Seller Email Scraper?

A modest dataset. In testing, 4 of 9 sampled blocks carried identity data, and a first-party retailer publishes far fewer contact addresses than a marketplace. Treat a run as a targeted research pass rather than a bulk list build.

#### Does the Lowe's Seller Email Scraper return marketplace-seller inboxes?

No. Lowes.com is a first-party retailer and does not publish per-seller mailboxes the way Amazon or eBay do. This Actor returns supplier, brand, vendor-relations and press contacts already published on Lowe's pages.

#### Why is `username` sometimes `null`?

Because Google did not expose a handle in that result block. When it does, `profileUrl` takes the form `https://www.lowes.com/brand/{username}`.

#### Where does the Lowe's Seller Email Scraper get its data?

Entirely from publicly indexed Google search results — titles, snippets and site labels — fetched through the Apify GOOGLE\_SERP proxy.

#### Does the Lowe's Seller Email Scraper log into Lowe's?

No. There is no login, no API use, no browser, no JavaScript rendering and no cookies.

#### Is the Lowe's Seller Email Scraper affiliated with Lowe's?

No. It is an independent tool, not supported, endorsed or affiliated with the retailer.

#### What does `possiblyTruncated` mean?

Google's snippet ellipsis touched the email, so the address may be cut short. Verify those rows first.

#### Can I run the Lowe's Seller Email Scraper without Apify proxy credentials?

No. The GOOGLE\_SERP proxy is required.

#### Why does my run stop at 100 emails?

Free Apify plans are capped at 100 emails per run. Paid plans are uncapped.

#### How do I find more supplier contacts than this Actor returns?

Combine it with marketplace and wholesale Actors — Amazon, eBay, Etsy and Faire all expose far more seller-published contact data than a first-party chain.

#### Which keywords work best with the Lowe's Seller Email Scraper?

Specific home-improvement product and manufacturer terms, combined with the default modifiers `email`, `contact`, `wholesale`, `customer service` and `inquiries`.

#### Can I export the dataset the Lowe's Seller Email Scraper produces?

Yes. Apify datasets export to JSON, CSV, XLSX and other formats, and are reachable through the Apify API.

### Leave a review

If the Lowe's Seller Email Scraper saved you time, please leave a star rating and a short
review on the Actor page.

Reviews are how other buyers judge whether a tool works, and they tell us which features to
build next.

If something did not work, email <neurodata.apify@gmail.com>
instead - bugs get fixed faster than they get complained about.

### Support

Questions, a bug report, or a custom build? Email **neurodata.apify@gmail.com**.

# Actor input Schema

## `keywords` (type: `array`):

Search terms describing the Lowe's accounts you want (niche, job title, industry).

## `location` (type: `string`):

Optional location phrase added to every query (e.g. "New York").

## `customDomains` (type: `array`):

Only emails ending with one of these domains are collected. With or without the leading @. Each domain is searched separately, so more domains means more results but a longer run - remove some for a faster, narrower search, or add your own (e.g. @company.com).

## `maxEmails` (type: `integer`):

Stop once this many unique emails have been collected.

## `countryCode` (type: `string`):

Two-letter country code for the search proxy (e.g. US, GB, DE). Empty for any.

## `expandQueries` (type: `boolean`):

Search each keyword x domain pair with several phrasings. Recommended - Google caps a single query at ~300 results.

## `queryModifiers` (type: `array`):

Extra words combined with each keyword when Expand queries is on. Tuned for Lowe's.

## `maxPagesPerQuery` (type: `integer`):

Google rarely returns more than ~30 pages for one query.

## `maxConcurrency` (type: `integer`):

How many queries run in parallel.

## Actor input object example

```json
{
  "keywords": [
    "supplier",
    "brand"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "maxEmails": 20,
  "countryCode": "",
  "expandQueries": true,
  "queryModifiers": [
    "email",
    "contact",
    "wholesale",
    "customer service",
    "inquiries"
  ],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

# Actor output Schema

## `results` (type: `string`):

Records produced by Lowe's Seller Email Scraper, stored in the run's default dataset.

# 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 = {
    "keywords": [
        "supplier",
        "brand"
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com"
    ],
    "countryCode": "",
    "queryModifiers": [
        "email",
        "contact",
        "wholesale",
        "customer service",
        "inquiries"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("leads-scraper/lowes-seller-email-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 = {
    "keywords": [
        "supplier",
        "brand",
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com",
    ],
    "countryCode": "",
    "queryModifiers": [
        "email",
        "contact",
        "wholesale",
        "customer service",
        "inquiries",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("leads-scraper/lowes-seller-email-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 '{
  "keywords": [
    "supplier",
    "brand"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "countryCode": "",
  "queryModifiers": [
    "email",
    "contact",
    "wholesale",
    "customer service",
    "inquiries"
  ]
}' |
apify call leads-scraper/lowes-seller-email-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,leads-scraper/lowes-seller-email-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/xxG22zyH69z1KIIY4/builds/rwSLeK3hPivd7Rnzy/openapi.json
