# 🌿 Landscaping & Lawn Care Leads Scraper - Emails & Phones (`renzomacar/landscaping-leads-scraper`) Actor

Landscaping and lawn care leads for any market: landscapers, tree services, irrigation and hardscape crews with phone, website, emails and socials pulled live from each company's site. For equipment dealers, suppliers, SaaS and agencies. $8 per 1,000 leads.

- **URL**: https://apify.com/renzomacar/landscaping-leads-scraper.md
- **Developed by:** [Renzo Madueno](https://apify.com/renzomacar) (community)
- **Categories:** Lead generation, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $8.00 / 1,000 leads

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#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

## 🌿 Landscaping & Lawn Care Leads Scraper — Emails & Phones

Green-industry companies are everywhere and nowhere: hundreds per metro, most too small for the big B2B databases to track properly. If you sell to landscapers — equipment, software, financing, agency services, wholesale plants and materials — this Actor turns any city into a working outreach list in minutes: **company name, phone, website, address, emails and social profiles pulled live from each company's own site**, at $8 per 1,000 companies.

### Segments covered out of the box

Pick any mix as keywords, or leave empty to sweep all of them:

- `landscaping company` — full-service design/build/maintain
- `lawn care service` — mowing, fertilization, weed control routes
- `landscape designer` — the high-ticket design/build end
- `tree service` — arborists, removal, trimming crews
- `irrigation contractor` — sprinkler install and repair
- `hardscape contractor` — pavers, patios, retaining walls

Add your own: "artificial turf installer", "snow removal service", "landscape lighting" — anything that appears on the map works, and every row is tagged with the `searchQuery` that found it.

### The dataset you get

One row per company: `name`, `category`, `address`/`city`/`country`, `phone` plus `websitePhones[]`, `website`, `email` + `emails[]` with an `emailFound` flag, `socialProfiles` (Facebook, Instagram, LinkedIn, Twitter), `techStack[]`, `rating` and `reviewsCount`, `placeUrl` and coordinates. Export CSV/Excel/JSON or pull via API into Instantly, Smartlead, HubSpot — anywhere.

### Field-tested plays

- **Equipment dealers & rental yards**: every tree service and hardscape crew within your delivery radius, sorted by review count = fleet size proxy.
- **Field-service SaaS**: crews still running on a Facebook page instead of a website (`emailFound=false`, no `website`) are greenfield accounts — you still get name + phone.
- **Suppliers of seed, chemicals, stone, nursery stock**: lawn care routes buy on a schedule; build the territory list once, refresh monthly on an Apify schedule.
- **Agencies**: `techStack` exposes companies on ancient WordPress builds with zero analytics — the exact profile that buys a $2k site redesign plus SEO retainer.

### Seasonality tip

Scrape territories in late winter, before the season starts — that's when landscapers make buying decisions, and when a fresh list (companies that survived the winter, new LLCs that just formed) beats last year's database by the widest margin.

### Price

$0.008 per company delivered ($8/1,000) + $0.01 per run start. A full metro sweep across all six default segments usually lands between 300 and 700 companies: **$2.50–5.60**.

### Example input

```json
{
  "location": "Atlanta, GA",
  "keywords": ["landscaping company", "tree service"],
  "maxResults": 120,
  "maxPagesPerSite": 2
}
```

### FAQ

**Realistically, how many have emails?**
Landscaping skews small and phone-first: typically 35–60% of companies with a website publish an email. Everyone has a phone number, so a call/text motion covers the rest.

**Same company appearing under two segments?**
A company found by both "landscaping company" and "lawn care service" appears once per matching listing — collapse duplicates on `website` or `phone` after export if needed.

**Can I run multiple cities at once?**
Yes — use `searchQueries` with one full query per line: `["tree service in Nashville, TN", "tree service in Memphis, TN"]`.

**Is this compliant?**
The data is publicly listed business information plus emails companies publish on their own sites. You are responsible for lawful outreach (CAN-SPAM, GDPR where applicable).

**Companies with no website at all?**
Kept by default (name/phone/address/rating). Set `onlyWithWebsite: true` to drop them — dropped rows are never charged.

### Irrigation, sprinkler and outdoor lighting companies

Irrigation is a trade of its own, not a line item inside "landscaping" — different licence, different suppliers, different buying season. It is reached by putting full searches into **Custom search queries**, which then replace both the keyword list and `location`:

```
irrigation company in Fort Worth, TX
sprinkler system installation in Arlington, TX
sprinkler repair service in Grand Prairie, TX
outdoor lighting company in Southlake, TX
drainage contractor in Fort Worth, TX
```

Controller manufacturers, distributors and smart-irrigation platforms want this slice on its own; a general landscaping sweep dilutes it with mow-and-blow crews who never install a valve.

### Hardscaping, paver patios and outdoor living

The high-ticket end of the yard. Ticket sizes run five figures, which changes who is worth calling:

```
hardscaping contractor in Charlotte, NC
paver patio installer in Huntersville, NC
retaining wall contractor in Concord, NC
outdoor kitchen builder in Charlotte, NC
fire pit and patio company in Matthews, NC
```

Hardscape crews build portfolio-driven websites because the work is visual, which shows up in the data as unusually high email coverage and an Instagram link on most rows. Sort by `reviewsCount` to find the ones already booked solid — those are the ones buying software, financing and crews rather than leads.

### Snow removal, pressure washing and the off-season

Landscaping companies survive winter by selling something else, and they list those services separately on Maps:

```
snow removal service in Minneapolis, MN
snow plowing contractor in Bloomington, MN
pressure washing company in Minneapolis, MN
holiday lighting installation in Edina, MN
gutter cleaning service in St. Paul, MN
```

Timing is the whole game here. Snow contractors sign supplier and subcontractor agreements in late summer and are unreachable from the first storm until March; holiday lighting is sold in September for December. `scrapedAt` on every row tells you exactly how fresh the list is when you come back to it a season later.

# Actor input Schema

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

City, region or country to search in, e.g. 'Atlanta, GA', 'Austin, TX', 'London, UK'.

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

Which green-industry service types to search for, one per line. Good options: 'landscaping company', 'lawn care service', 'landscape designer', 'tree service', 'irrigation contractor', 'hardscape contractor', 'artificial turf installer'. Leave empty to search all common service types at once.

## `searchQueries` (type: `array`):

Full searches, one per line (e.g. 'tree service in Nashville, TN'). When set, these override Location + service types. Use several queries to cover multiple cities in one run.

## `maxResults` (type: `integer`):

Maximum number of companies to find per search. One search typically yields up to ~120 companies.

## `maxPagesPerSite` (type: `integer`):

How many pages to check on each company website when hunting for emails (homepage, /contact, /about...). More pages = more emails found, slightly slower run.

## `onlyWithWebsite` (type: `boolean`):

Drop companies that have no website (they can never have an email). You are not charged for dropped companies.

## `includeGenericEmails` (type: `boolean`):

Keep every published address, including shared inboxes like info@, hello@ and contact@. Disable to drop only non-deliverable system addresses (noreply@, no-reply@, donotreply@, mailer-daemon@, postmaster@, webmaster@, hostmaster@, abuse@).

## `language` (type: `string`):

Language code for the discovery search (e.g. 'en', 'es', 'fr', 'de').

## Actor input object example

```json
{
  "location": "Atlanta, GA",
  "keywords": [
    "landscaping company"
  ],
  "maxResults": 5,
  "maxPagesPerSite": 1,
  "onlyWithWebsite": false,
  "includeGenericEmails": true,
  "language": "en"
}
```

# Actor output Schema

## `leads` (type: `string`):

Complete B2B leads (company, website, phone, address, emails, social profiles), one item per lead in the 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 = {
    "location": "Atlanta, GA",
    "keywords": [
        "landscaping company"
    ],
    "maxResults": 5,
    "maxPagesPerSite": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("renzomacar/landscaping-leads-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 = {
    "location": "Atlanta, GA",
    "keywords": ["landscaping company"],
    "maxResults": 5,
    "maxPagesPerSite": 1,
}

# Run the Actor and wait for it to finish
run = client.actor("renzomacar/landscaping-leads-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 '{
  "location": "Atlanta, GA",
  "keywords": [
    "landscaping company"
  ],
  "maxResults": 5,
  "maxPagesPerSite": 1
}' |
apify call renzomacar/landscaping-leads-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,renzomacar/landscaping-leads-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/mA9miXtH21mYzOuQz/builds/NWvhBFvsPJwyIyzcA/openapi.json
