# Angi Scraper | Angie's List HVAC Near Me (`lentic_clockss/angi-scraper`) Actor

Scrape Angi.com (formerly Angie's List) HVAC, plumbers, roofers and home-service contractors by ZIP. Export names, nearme street addresses, ratings, and Angi Inc contact phones. HomeStars Canada public phones when listed. Guest pages only — US merchant phones are gated. CSV, Excel, or JSON.

- **URL**: https://apify.com/lentic\_clockss/angi-scraper.md
- **Developed by:** [kane liu](https://apify.com/lentic_clockss) (community)
- **Categories:** Lead generation
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.20 / 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/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

## Angi Scraper | Angie's List HVAC Near Me

**Scrape [Angi.com](https://www.angi.com/) (formerly Angie's List) for US home-service contractors — HVAC, plumbers, roofers, electricians, and 40+ nearme trades — by ZIP code and category. Export company names, JSON-LD street addresses, ratings, Angi Inc contact phones, and HomeStars Canada public phones when listed. Download CSV, Excel, or JSON.**

Use this Actor as a practical **Angi scraper / Angie's List data API alternative** for **contractor directories**, **home-service lead research**, and **ZIP-level market coverage**. Pick `searchType=nearme`, a category slug such as `hvac` or `roofing`, an optional US `postalCode`, and `maxResults`. Residential egress is handled by the scrape worker — you do not send cookies, `proxyUrl`, or Request quote payloads.

- **Nearme lists** on `www.angi.com/nearme/{slug}/` with **JSON-LD streetAddress** (the cards hide the street; the structured data has it)
- **US category search** via Angi gateway v5 JSON (not the 36KB `/search` HTML shell) plus optional nearme-street merge by `reviews-{id}`
- **Company profiles** (`…-reviews-{id}.htm`) for ZIP and owner / tech names
- **Angi Inc contact** (`/landing/contact-us`) — Indianapolis street + customer-service `tel:`
- **HomeStars Canada** public profile phones when `__NEXT_DATA__` includes them
- Guest pages only — **no Request quote**, **no `request.angi.com`**, **no login**
- Export to **Excel / CSV / JSON**, or connect Make, n8n, Zapier, Python, or the Apify API
- **Pay per event** — Actor start + each Dataset result; **platform usage is included** (you do not pay separate Apify compute on top)

> **Unofficial tool.** This Actor is not affiliated with, endorsed by, or sponsored by Angi Inc. It collects **guest / public** pages a logged-out visitor can already see. It does **not** log in, submit Request quote, or scrape private account data.

***

### What does the Angi Scraper do?

[Angi Scraper](https://apify.com/lentic_clockss/angi-scraper) lets you **extract structured angi.com contractor listings** without running your own US residential proxy and anti-bot stack. Give it a nearme category, a ZIP + `categoryId` for search, or a batch of live profile URLs, then start a run.

Under the hood, the Actor:

1. Validates your input (`searchType`, `market`, `category` / `postalCode`, URLs)
2. Enforces free-tier caps when you are on a free Apify plan
3. Calls a managed worker that fetches guest Angi HTML/JSON (Chrome TLS impersonation + US residential egress)
4. Parses nearme JSON-LD streets, gateway v5 search cards, `…-reviews-{id}.htm` profiles, Angi Inc contact, and opened HomeStars / Instapro lists
5. Writes Dataset rows plus `INPUT_ECHO`, `RUN_SUMMARY` (and `ERROR_SUMMARY` on failure) to the key-value store

You run it like any other Apify Actor — schedule it, call it from the API, or plug it into automations.

***

### What Angi data can I extract?

| Data | Nearme | US search | US detail | Angi Inc contact | HomeStars CA |
| --- | :---: | :---: | :---: | :---: | :---: |
| Company / org name | ✅ | ✅ | ✅ | Angi Inc | ✅ |
| Live profile URL (`reviews-{id}`) | ✅ | ✅ | ✅ | — | `/profile/` |
| JSON-LD street address | ✅ | merge optional | often ZIP only | Indianapolis HQ | usually city only |
| ZIP / locality / region | ✅ | ✅ | ✅ | ✅ | city |
| Owner / technician names | — | after enrich | ✅ | — | — |
| Merchant phone | **gated** | **gated** | **gated** | HQ `tel:` | public when listed |
| Merchant email | usually none | usually none | usually none | — | platform inbox ≠ shop |
| Super Service Award filter | — | `ssaFilter` | — | — | — |

**Identity keys:** US contractors use the numeric id in `…-reviews-{id}.htm` (do not invent ids). HomeStars uses the public profile id. Angi Inc contact is a single HQ entity page, not a contractor SERP.

**Honest phone policy:** US merchant phones are **gated** on guest pages. There is no Show phone; Request quote is a submit, not a reveal. Rows include empty `phones` plus `leadAbsences` rather than fake numbers. Store peers that advertise “every plumber’s phone” are claiming a channel this Actor will not fake.

***

### Why scrape Angi?

[Angi](https://www.angi.com/) (formerly **Angie's List**) is one of the largest US **home-services marketplaces** for **HVAC**, **plumbing**, **roofing**, **electrical**, **windows**, **flooring**, and dozens of other trades. Teams scrape public Angi pages to:

- Build **ZIP-level contractor directories** (nearme streets + search cards)
- Watch **ratings / Super Service Award** coverage for a trade
- Pull **Angi Inc HQ contact** without paging the site by hand
- Enrich CRM-adjacent catalogs with **names + addresses** when phones are gated
- Cover **HomeStars Canada** public phones on the same Actor when `market=ca`

Compared with a generic URL scraper, this Actor returns **Angi-specific fields** (`kind`, `reviews-{id}` URLs, JSON-LD street, `leadAbsences`) in one input surface.

#### How this Angi scraper compares

Store search for “Angi scraper” / “Angie's List scraper” also surfaces crawlers that advertise **phone numbers, full addresses, and 150+ categories**, often from **$0.80 / 1,000** or a **$30/month** rental. Some of those phones exist only for **Angi-advertiser** pros; others over-claim guest data. This Actor is the **guest table**: names, nearme streets, ratings, HQ phones — **US merchant phones gated on purpose**.

| | This Actor | Typical Store peers |
| --- | --- | --- |
| Nearme JSON-LD street by ZIP | Yes (`?postalCode=`) | Rare / undocumented |
| Gateway v5 search (not `/search` HTML) | Yes | Often HTML-only |
| US merchant phone on guest pages | **No** (gated) | Often claimed yes |
| HomeStars CA public phones | Yes when listed | Rare |
| Angi Inc `/landing/contact-us` | Yes | Rare |
| Request quote / `request.angi.com` | **Never** | Sometimes implied |
| Pricing | **PPE $3.00 / 1,000** + $0.005 start; platform usage included | from $0.80 / 1,000, or $30/month + usage |

Use a peer when you *need* advertiser-tier phones and accept their source. Use this Actor when you want **export-ready guest Angi rows** and **developer-paid platform usage**.

Honest scope: **city/state `/companylist/` hubs have zero merchant cards** — they are not a SERP. **Map search does not exist** on angi.com. **angi.ca / angi.co.uk / angi.de are not this product** (`.co.uk` is a domain-sale page). MyBuilder UK and Instapro DE/FR/NL/IT lists are opened for identity; public phones are often still gated.

***

### More Actors like this

Need Care.com caregivers, HomeStars Canada trades, Google Maps local businesses, or a generic protected-page scrape? Use a **dedicated Actor** below for structured fields. Use this Actor for **Angi.com / Angie's List** US contractors, nearme streets, and Angi Inc contact.

#### Similar home-service & local-lead scrapers

- [Care.com Scraper](https://apify.com/lentic_clockss/care-scraper) — US caregivers, day care, jobs, About/contact phones
- [HomeStars Scraper](https://apify.com/lentic_clockss/homestars-scraper) — Canadian home-service directories and public profile phones
- [Google Maps Scraper](https://apify.com/lentic_clockss/google-maps-scraper) — local businesses, ratings, Maps places
- [Phone Number Intelligence](https://apify.com/lentic_clockss/phone-number-intelligence) — validate / enrich phones from any list
- [Email Risk Validator](https://apify.com/lentic_clockss/email-risk-validator) — score emails before you import a CRM
- [Stealth Web Scraper](https://apify.com/lentic_clockss/stealth-web-scraper) — generic protected pages (prefer a dedicated Actor when one exists)

#### Prefer a dedicated site scraper?

If your target has a specialized Actor below, use that first — usually cheaper and more structured than a generic URL scrape.

**Local services & lead gen**

- [Angi Scraper](https://apify.com/lentic_clockss/angi-scraper)
- [Care.com Scraper](https://apify.com/lentic_clockss/care-scraper)
- [HomeStars Scraper](https://apify.com/lentic_clockss/homestars-scraper)
- [Google Maps Scraper](https://apify.com/lentic_clockss/google-maps-scraper)

**Real Estate**

- [Zoopla UK Scraper](https://apify.com/lentic_clockss/zoopla-scraper)
- [Rightmove Scraper](https://apify.com/lentic_clockss/rightmove-property-scraper)
- [Zillow & Zumper Scraper](https://apify.com/lentic_clockss/us-real-estate-scraper)
- [Realtor.com Scraper](https://apify.com/lentic_clockss/realtor-com-scraper)
- [Apartments.com Rental Scraper](https://apify.com/lentic_clockss/apartments-com-rental-scraper)
- [Idealista Scraper](https://apify.com/lentic_clockss/idealista-scraper)
- [realestate.com.au Scraper](https://apify.com/lentic_clockss/realestate-com-au-scraper)
- [Properati LATAM Scraper](https://apify.com/lentic_clockss/properati-scraper)

**Jobs & Freelance**

- [LinkedIn Jobs Scraper](https://apify.com/lentic_clockss/linkedin-jobs-scraper)
- [Indeed Jobs Scraper](https://apify.com/lentic_clockss/indeed-jobs-scraper)
- [Upwork Jobs Scraper](https://apify.com/lentic_clockss/upwork-jobs-scraper)
- [Glassdoor Scraper](https://apify.com/lentic_clockss/glassdoor-scraper)
- [Fiverr Gigs Scraper](https://apify.com/lentic_clockss/fiverr-programming-tech-gigs-scraper)
- [Bayt Jobs Scraper](https://apify.com/lentic_clockss/bayt-scraper)

**E-commerce**

- [Walmart Product Scraper](https://apify.com/lentic_clockss/walmart-scraper)
- [Amazon Search Scraper](https://apify.com/lentic_clockss/amazon-search-results-collector)
- [Shopee Search Scraper](https://apify.com/lentic_clockss/shopee-search-scraper)
- [Etsy Scraper](https://apify.com/lentic_clockss/etsy-scraper)
- [SHEIN Product Scraper](https://apify.com/lentic_clockss/shein-scraper)
- [Temu Product Scraper](https://apify.com/lentic_clockss/temu-scraper)
- [Target Product Scraper](https://apify.com/lentic_clockss/target-scraper)
- [Allegro Scraper](https://apify.com/lentic_clockss/allegro-scraper)

**Travel & Stays**

- [Booking.com Hotels Scraper](https://apify.com/lentic_clockss/booking-hotels-scraper)
- [Airbnb Listings Scraper](https://apify.com/lentic_clockss/airbnb-listings-scraper)
- [Expedia Scraper](https://apify.com/lentic_clockss/expedia-scraper)
- [TripAdvisor Scraper](https://apify.com/lentic_clockss/tripadvisor-scraper)

**Social & Content**

- [YouTube Research Scraper](https://apify.com/lentic_clockss/youtube-research-scraper)
- [TikTok Scraper](https://apify.com/lentic_clockss/tiktok-scraper)
- [Reddit Scraper](https://apify.com/lentic_clockss/reddit-scraper)
- [YouTube Shorts Scraper](https://apify.com/lentic_clockss/youtube-shorts-scraper)

**Ads Intelligence**

- [Facebook Ad Library Scraper](https://apify.com/lentic_clockss/facebook-ad-library-scraper)
- [TikTok Ads Scraper](https://apify.com/lentic_clockss/tiktok-ads-top-ads-actor)

**General tools**

- [Stealth Web Scraper](https://apify.com/lentic_clockss/stealth-web-scraper)
- [Email Risk Validator](https://apify.com/lentic_clockss/email-risk-validator)
- [Phone Number Intelligence](https://apify.com/lentic_clockss/phone-number-intelligence)

→ See the full catalog in [Related Actors](#related-actors) below, or browse [apify.com/lentic\_clockss](https://apify.com/lentic_clockss).

Need a **custom site** (listing + detail, your field list)? [Submit a custom scraper request](https://custom-scraper-intake-977720205770.us-central1.run.app/).

***

### How to scrape Angi.com (no code required)

1. Create a free [Apify](https://apify.com/) account
2. Open [Angi Scraper](https://apify.com/lentic_clockss/angi-scraper)
3. Choose **searchType**: `nearme`, `search`, `detail`, `contact`, `about`, `intl-list`, or `intl-detail`
4. For nearme, enter a **category slug** (`hvac`, `roofing`, `electrical`, `windows`, `flooring`, `pest-control`, …) and optionally a US **ZIP** (`postalCode`) so JSON-LD streets match that area
5. For US search, set **postalCode** + **categoryId** (plumbing = `107`). Do not paste the `/search` HTML page as if it were a listing feed
6. Click **Start** and download the Dataset as JSON, CSV, Excel, or JSONL

Start with `maxResults: 3–5` to verify the ZIP and trade, then scale up. Empty `{}` runs a tiny NYC HVAC nearme so the platform auto-test succeeds — for real jobs, pass a fresh ZIP and category.

#### Find HVAC contractors near a ZIP

**In plain English:** pick `nearme` + `hvac` + a US ZIP → get a table of Angi HVAC pros with JSON-LD street addresses.

**You give:** `searchType=nearme`, `category=hvac`, `postalCode=75201`, `maxResults=20`.

#### Scrape plumbers, roofers, or electricians

**In plain English:** change the nearme slug (`roofing`, `electrical`, `windows`, `flooring`). Aliases such as `gutters` map to the live Angi slug (`gutter-repair-replacement`).

**You give:** `searchType=nearme`, `category=roofing`, optional `postalCode`.

#### Search Angi by category ID and ZIP

**In plain English:** gateway search returns thinner cards (phones still gated). Turn **merge nearme streets** on to overlay JSON-LD streets onto matching `reviews-{id}` rows.

**You give:** `searchType=search`, `categoryId=107`, `postalCode=33101`, `mergeNearmeStreets=true`.

#### Pull Angi Inc contact or a profile URL

**In plain English:** `contact` returns Angi Inc Indianapolis street + HQ phones. `detail` follows live `…-reviews-{id}.htm` URLs for ZIP and names. Do **not** paste `request.angi.com` or `/send-request-to` links.

#### HomeStars Canada and Instapro lists

**In plain English:** `market=ca` + `searchType=intl-list` + a city slug such as `toronto` returns HomeStars cards; enrich follows public profiles for phones when Angi/HomeStars publish them.

#### Feed AI agents and automations

**In plain English:** start the Actor from Make, n8n, Zapier, LangChain, or the Apify API → Dataset rows are structured JSON (`name`, `url`, `address`, `phones`, `leadAbsences`).

***

### How much does it cost to scrape Angi?

This Actor uses **pay-per-event** pricing. You are charged for:

| Event | Price |
| --- | --- |
| Actor Start (`apify-actor-start`) | **$0.005** per start |
| Result (`apify-default-dataset-item`) | **$3.00 / 1,000** results (**$0.003** each on FREE/BRONZE) |

**Platform usage costs are included** — you do **not** pay separate Apify compute/proxy usage for this Actor on top of the event prices above (**User pays platform usage costs = No**).

#### Volume discount tiers (per result)

| Tier | $/1,000 | per result |
| --- | ---: | ---: |
| FREE\* | $3.00 | $0.003 |
| BRONZE | $3.00 | $0.003 |
| SILVER | $2.60 | $0.0026 |
| GOLD | $2.20 | $0.0022 |
| PLATINUM | $2.00 | $0.002 |
| DIAMOND | $1.60 | $0.0016 |

\*FREE matches BRONZE for this Actor.

#### Example cost estimates (FREE/BRONZE)

| Results collected | Approx. event cost\* |
| --- | ---: |
| 100 | ~$0.31 |
| 1,000 | ~$3.01 |
| 10,000 | ~$30.01 |

\*Assumes one Actor start at default memory billing for start events, plus `$0.003` per Dataset item. Exact start billing can scale with allocated memory (one start event per GB, minimum one). Default memory is **1024 MB**.

Empty / failed runs that write **zero** default-dataset rows are not billed as results (you still pay Actor Start).

#### Free plan limits

On a **free Apify plan**, this Actor enforces developer limits of **10 runs** and **200 results per run**. Upgrade to a paid Apify plan for unlimited runs (event prices still apply).

***

### Input examples

#### HVAC nearme for a US ZIP

```json
{
  "searchType": "nearme",
  "category": "hvac",
  "postalCode": "75201",
  "maxResults": 20,
  "enrichDetails": true
}
```

#### Roofing nearme

```json
{
  "searchType": "nearme",
  "category": "roofing",
  "postalCode": "33101",
  "maxResults": 15,
  "maxPages": 1
}
```

#### Plumbing search + nearme street merge

```json
{
  "searchType": "search",
  "category": "plumbing",
  "categoryId": 107,
  "postalCode": "60601",
  "maxResults": 10,
  "mergeNearmeStreets": true,
  "enrichDetails": true
}
```

#### Angi Inc contact

```json
{
  "searchType": "contact"
}
```

#### HomeStars Toronto list

```json
{
  "searchType": "intl-list",
  "market": "ca",
  "city": "toronto",
  "maxResults": 10,
  "enrichDetails": true
}
```

***

### Output

Each Dataset row is a lead-shaped object: `name`, `kind`, `url`, `category`, `phones[]`, `emails[]`, `address` (`street`, `locality`, `region`, `postalCode`, `country`, `full`), `person`, `org`, `leadSource`, `leadReveal`, `leadAbsences`.

US nearme rows should have a **real street** from JSON-LD, not the placeholder `Located In`. US search/detail merchant rows often have **empty phones** plus `leadAbsences` — that is expected, not a parse bug. HomeStars public phones appear when the profile JSON includes them. Filter out `schema.org` if you ever see it as a website — that is not a shop URL.

Key-value store: `INPUT_ECHO`, `RUN_SUMMARY`, `ERROR_SUMMARY`.

***

### FAQ

#### Do I need an Angi account or API key?

No. This Actor reads **guest** angi.com / HomeStars pages. You do not log in, and you do not pass an Angi developer key.

#### Can I get every contractor's phone number?

Not on US guest pages. Angi gates merchant phones; Request quote is a lead form, not a reveal. This Actor records that as `leadAbsences` instead of inventing numbers. **HomeStars Canada** and **Angi Inc contact** are the opened phone channels.

#### Does `postalCode` work on nearme?

Yes. Use **`?postalCode=`** (Angi ignores `?zip=` for geo). Empty `{}` uses schema default ZIP `10001` so the platform auto-test succeeds.

#### Which categories are supported?

Free-text **nearme slugs** as they appear in Angi URLs (`hvac`, `roofing`, `electrical`, `windows`, `flooring`, `pest-control`, …). For `searchType=search`, plumbing maps to gateway `categoryId` **107**; other trades need the live numeric id (do not reuse `request.angi.com` category ids — different ID space).

#### Can I scrape the map or city hub?

No. `searchType=map` is out of scope (Angi has no map SERP). `/companylist/us/{st}/…` hubs have **zero merchant cards**.

#### Why not Request quote?

Submitting Request quote is a **write** to Angi, not a public read. This Actor never hits `request.angi.com` or `/send-request-to`.

#### Is scraping Angi legal?

This Actor collects publicly reachable guest pages. You are responsible for how you use the data (including US privacy rules). This is an unofficial third-party tool. Follow [Angi’s terms](https://www.angi.com/) and your own compliance review.

#### Is this affiliated with Angi or Angie's List?

No.

#### Do I need to bring proxies?

No. Do not send `proxyUrl`. The worker provides US residential egress.

#### What if a run returns 0 rows or a challenge page?

Retry with another opened ZIP / slug, or use `searchType=contact` to confirm the worker is healthy. Check `ERROR_SUMMARY` in the key-value store. France city lists use live slugs such as `paris-01`, not `paris`.

#### Can I use it from Make, n8n, Zapier, or LangChain?

Yes. Actor ID `lentic_clockss/angi-scraper`. See [Connect to your tools](#connect-to-your-tools).

***

### Input reference

| Parameter | Type | Description |
| --- | --- | --- |
| `searchType` | string | `nearme`, `search`, `detail`, `contact`, `about`, `intl-list`, `intl-detail`. `map` / `city-hub` / `leads-funnel` are out of scope |
| `market` | string | `us` (angi.com), `ca` (HomeStars), `uk` (MyBuilder), `de`/`at`/`fr`/`nl`/`it` (Instapro lists) |
| `category` | string | Nearme slug (`hvac`, `roofing`, …) |
| `categoryId` | integer | US gateway search id (plumbing = 107) |
| `postalCode` | string | US ZIP; required for `search`; optional geo for `nearme` |
| `ssaFilter` | boolean | US search Super Service Award filter |
| `enrichDetails` | boolean | Follow US `…-reviews-{id}.htm` / Instapro profiles (default on) |
| `mergeNearmeStreets` | boolean | Overlay nearme JSON-LD streets onto search rows (default on) |
| `maxResults` | integer | Cap Dataset rows (free plan ≤ 200) |
| `maxPages` | integer | Search offset pages / Instapro `page=N` (hard cap 10) |
| `detailUrls` | array | Live angi.com profile / contact or HomeStars `/profile/` URLs |
| `city` | string | Instapro / HomeStars city slug (`toronto`, `berlin`, `paris-01`) |
| `workerBaseUrl` | string | Optional HTTPS override. Production source of truth is Actor env |

Do **not** send `proxyUrl`, cookies, Request quote payloads, or `request.angi.com` URLs.

Full output schema is on the Dataset tab. Key-value store: `INPUT_ECHO`, `RUN_SUMMARY`, `ERROR_SUMMARY`.

***

### Connect to your tools

| Platform | How to connect |
| --- | --- |
| Make.com | Search “Apify” → “Run Actor” → Actor ID `lentic_clockss/angi-scraper` |
| n8n | Add Apify node → “Run Actor” → same Actor ID |
| Zapier | Apify integration → “Run Actor” |
| LangChain | `ApifyActorsTool("lentic_clockss/angi-scraper")` |
| Python / Node.js | Apify SDK or direct HTTPS call |

#### API call example

```bash
curl "https://api.apify.com/v2/acts/lentic_clockss~angi-scraper/runs" \
  -X POST \
  -H "Authorization: Bearer YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchType":"nearme","category":"hvac","postalCode":"75201","maxResults":10}'
```

Results come back in JSON via the Apify Dataset API:

```text
GET https://api.apify.com/v2/datasets/{datasetId}/items?format=json
```

***

### Related Actors

All public Actors from [lentic\_clockss](https://apify.com/lentic_clockss). Click a name to open the Store detail page.

#### Local services & lead gen

- [Angi Scraper](https://apify.com/lentic_clockss/angi-scraper)
- [Care.com Scraper](https://apify.com/lentic_clockss/care-scraper)
- [HomeStars Scraper](https://apify.com/lentic_clockss/homestars-scraper)
- [Google Maps Scraper](https://apify.com/lentic_clockss/google-maps-scraper)
- [Phone Number Intelligence](https://apify.com/lentic_clockss/phone-number-intelligence)
- [Email Risk Validator](https://apify.com/lentic_clockss/email-risk-validator)

#### Developer / Open source / AI

- [Hugging Face Scraper](https://apify.com/lentic_clockss/huggingface-scraper)
- [GitHub Scraper](https://apify.com/lentic_clockss/github-scraper)
- [Apple App Store Scraper](https://apify.com/lentic_clockss/apple-app-store-scraper)
- [Hacker News Scraper](https://apify.com/lentic_clockss/hacker-news-scraper)
- [Stealth Web Scraper](https://apify.com/lentic_clockss/stealth-web-scraper)

#### Jobs & Freelance

- [LinkedIn Jobs Scraper](https://apify.com/lentic_clockss/linkedin-jobs-scraper)
- [Bayt Jobs Scraper](https://apify.com/lentic_clockss/bayt-scraper)
- [Fiverr Gigs Scraper](https://apify.com/lentic_clockss/fiverr-programming-tech-gigs-scraper)
- [Freelancer.com Scraper](https://apify.com/lentic_clockss/freelancer-scraper)
- [Glassdoor Scraper](https://apify.com/lentic_clockss/glassdoor-scraper)
- [Himalayas Jobs Scraper](https://apify.com/lentic_clockss/himalayas-jobs-scraper)
- [Indeed Jobs Scraper](https://apify.com/lentic_clockss/indeed-jobs-scraper)
- [Jobicy Remote Jobs Scraper](https://apify.com/lentic_clockss/jobicy-remote-jobs-scraper)
- [RemoteOK Jobs Scraper](https://apify.com/lentic_clockss/remoteok-all-jobs-scraper)
- [SEEK Jobs Scraper](https://apify.com/lentic_clockss/seek-scraper)
- [Upwork Jobs Scraper](https://apify.com/lentic_clockss/upwork-jobs-scraper)

#### Real Estate

- [Zoopla UK Scraper](https://apify.com/lentic_clockss/zoopla-scraper)
- [Zillow & Zumper Scraper](https://apify.com/lentic_clockss/us-real-estate-scraper)
- [Realtor.com Scraper](https://apify.com/lentic_clockss/realtor-com-scraper)
- [99.co Scraper](https://apify.com/lentic_clockss/ninetynine-co-sg-scraper)
- [Realtor.com Agents Scraper](https://apify.com/lentic_clockss/realtor-com-agents-scraper)
- [Apartments.com Rental Scraper](https://apify.com/lentic_clockss/apartments-com-rental-scraper)
- [Bayut Scraper](https://apify.com/lentic_clockss/bayut-uae-scraper)
- [Craigslist Housing Scraper](https://apify.com/lentic_clockss/craigslist-housing-scraper)
- [Daft.ie Scraper](https://apify.com/lentic_clockss/daft-property-scraper)
- [Dot Property Scraper](https://apify.com/lentic_clockss/dot-property-th-scraper)
- [FINN.no Scraper](https://apify.com/lentic_clockss/finn-scraper)
- [Funda Scraper](https://apify.com/lentic_clockss/funda-scraper)
- [Hepsiemlak Scraper](https://apify.com/lentic_clockss/hepsiemlak-scraper)
- [Idealista Scraper](https://apify.com/lentic_clockss/idealista-scraper)
- [Immobiliare.it Scraper](https://apify.com/lentic_clockss/immobiliare-property-scraper)
- [ImmoScout24 Scraper](https://apify.com/lentic_clockss/immobilienscout24-scraper)
- [Naver Land Scraper](https://apify.com/lentic_clockss/naver-land-scraper)
- [OpenSooq Scraper](https://apify.com/lentic_clockss/opensooq-real-estate-scraper)
- [Otodom Scraper](https://apify.com/lentic_clockss/otodom-scraper)
- [Properati LATAM Scraper](https://apify.com/lentic_clockss/properati-scraper)
- [Property Finder Scraper](https://apify.com/lentic_clockss/property-finder-uae-scraper)
- [PropertyGuru Scraper](https://apify.com/lentic_clockss/propertyguru-sg-scraper)
- [realestate.com.au Scraper](https://apify.com/lentic_clockss/realestate-com-au-scraper)
- [Realtor.ca Scraper](https://apify.com/lentic_clockss/realtor-ca-scraper)
- [Rightmove Scraper](https://apify.com/lentic_clockss/rightmove-property-scraper)
- [SeLoger Scraper](https://apify.com/lentic_clockss/seloger-property-scraper)
- [SUUMO Scraper](https://apify.com/lentic_clockss/suumo-property-scraper)
- [Zillow Group Scraper](https://apify.com/lentic_clockss/zillow-group-scraper)

#### E-commerce

- [Shopee Search Scraper](https://apify.com/lentic_clockss/shopee-search-scraper)
- [E-commerce Scraper](https://apify.com/lentic_clockss/ecommerce-scraper)
- [1688 Global Product Search Scraper](https://apify.com/lentic_clockss/1688-global-scraper)
- [Allegro Scraper](https://apify.com/lentic_clockss/allegro-scraper)
- [Amazon Search Scraper](https://apify.com/lentic_clockss/amazon-search-results-collector)
- [ASOS Product Scraper](https://apify.com/lentic_clockss/asos-scraper)
- [Cdiscount Product Scraper](https://apify.com/lentic_clockss/cdiscount-scraper)
- [Costco Product Scraper](https://apify.com/lentic_clockss/costco-scraper)
- [Coupang Product Scraper](https://apify.com/lentic_clockss/coupang-scraper)
- [Etsy Scraper](https://apify.com/lentic_clockss/etsy-scraper)
- [Lazada Scraper](https://apify.com/lentic_clockss/lazada-ph-search-results-collector)
- [MercadoLibre Scraper](https://apify.com/lentic_clockss/mercadolibre-scraper)
- [Mercari Japan Scraper](https://apify.com/lentic_clockss/mercari-scraper)
- [Rakuten Japan Scraper](https://apify.com/lentic_clockss/rakuten-scraper)
- [SHEIN Product Scraper](https://apify.com/lentic_clockss/shein-scraper)
- [Target Product Scraper](https://apify.com/lentic_clockss/target-scraper)
- [Temu Product Scraper](https://apify.com/lentic_clockss/temu-scraper)
- [Walmart Product Scraper](https://apify.com/lentic_clockss/walmart-scraper)
- [Watsons Product Scraper](https://apify.com/lentic_clockss/watsons-scraper)

#### Travel & Stays

- [Booking.com & Airbnb Scraper](https://apify.com/lentic_clockss/booking-airbnb-scraper)
- [Agoda Scraper](https://apify.com/lentic_clockss/agoda-scraper)
- [Airbnb Listings Scraper](https://apify.com/lentic_clockss/airbnb-listings-scraper)
- [Booking.com Hotels Scraper](https://apify.com/lentic_clockss/booking-hotels-scraper)
- [Despegar Scraper](https://apify.com/lentic_clockss/despegar-scraper)
- [Expedia Scraper](https://apify.com/lentic_clockss/expedia-scraper)
- [Traveloka Scraper](https://apify.com/lentic_clockss/traveloka-scraper)
- [Travelstart Flights Scraper](https://apify.com/lentic_clockss/travelstart-scraper)
- [Trip.com Scraper](https://apify.com/lentic_clockss/trip-com-scraper)
- [TripAdvisor Scraper](https://apify.com/lentic_clockss/tripadvisor-scraper)

#### Social & Content

- [TikTok Scraper](https://apify.com/lentic_clockss/tiktok-scraper)
- [Reddit Scraper](https://apify.com/lentic_clockss/reddit-scraper)
- [YouTube Shorts Scraper](https://apify.com/lentic_clockss/youtube-shorts-scraper)
- [YouTube Research Scraper](https://apify.com/lentic_clockss/youtube-research-scraper)

#### Ads Intelligence

- [Facebook Ad Library Scraper](https://apify.com/lentic_clockss/facebook-ad-library-scraper)
- [Google Ads Transparency VN](https://apify.com/lentic_clockss/google-ads-transparency-center-vn)
- [TikTok Ads Scraper](https://apify.com/lentic_clockss/tiktok-ads-top-ads-actor)

#### Local & Maps

- [Google Maps Scraper](https://apify.com/lentic_clockss/google-maps-scraper)

→ Browse the full profile: [apify.com/lentic\_clockss](https://apify.com/lentic_clockss)

***

### Changelog

- **0.1.4** — Store README SEO (Angi.com / Angie's List / HVAC / plumbers / ZIP nearme), competitor comparison, More Actors + Related Actors. PPE: Actor Start $0.005 + result $3.00/1k with volume tiers. Platform usage paid by developer.
- **0.1.3** — Free-text nearme slugs, search×nearme street merge, Instapro pagination, HomeStars / DE–IT lists.
- **0.1.2** — First Cloud Run worker pairing; US nearme JSON-LD streets + gateway v5 search.

# Actor input Schema

## `searchType` (type: `string`):

Opened: nearme (JSON-LD street), search (gateway v5; needs postalCode + categoryId), detail, contact, about, intl-list, intl-detail. map/city-hub/leads-funnel are out of scope.

## `market` (type: `string`):

us is www.angi.com (opened). ca=HomeStars, uk=MyBuilder. de/at/fr/nl/it Instapro: list paths opened; reveal 未验证 until live lead DQ.

## `category` (type: `string`):

Free-text /nearme/{slug}/ (hvac, roofing, windows, flooring, pest-control, …). Aliases: gutters→gutter-repair-replacement. For searchType=search, plumbing maps to categoryId 107; other slugs need categoryId or homepage harvest.

## `categoryId` (type: `integer`):

Required for searchType=search unless category=plumbing (107). Do not parse the 36KB /search HTML shell.

## `postalCode` (type: `string`):

Required for searchType=search. Use a real ZIP; do not reuse recon canary 94102 for acceptance.

## `query` (type: `string`):

Optional text sent with US gateway search (address-bar query=).

## `city` (type: `string`):

For intl-list. Leave empty to harvest a live homepage city (FR=paris-01 not paris). Do not invent paris/wien.

## `ssaFilter` (type: `boolean`):

US search only. Maps to XHR superServiceAwardFilter (not the URL key ssaFilter).

## `enrichDetails` (type: `boolean`):

Fetch US ...-reviews-{id}.htm (ZIP/names) and Instapro profiles (phone when public). Default on.

## `mergeNearmeStreets` (type: `boolean`):

When searchType=search, overlay /nearme/{slug}/?postalCode= JSON-LD streets onto matching reviews-{id} rows. Does not hit request.angi.com.

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

Cap emitted rows.

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

US search pages via gateway offset (limit=20) and Instapro city-list page=N. Hard cap 10.

## `detailUrls` (type: `array`):

Optional live angi.com ...-reviews-{id}.htm, /landing/contact-us, or HomeStars /profile/ URLs. Do not send request.angi.com or /send-request-to.

## `workerBaseUrl` (type: `string`):

HTTPS only. Production source of truth is Actor env WORKER\_BASE\_URL.

## Actor input object example

```json
{
  "searchType": "nearme",
  "market": "us",
  "category": "hvac",
  "categoryId": 107,
  "postalCode": "10001",
  "query": "",
  "ssaFilter": false,
  "enrichDetails": true,
  "mergeNearmeStreets": true,
  "maxResults": 3,
  "maxPages": 1
}
```

# Actor output Schema

## `listings` (type: `string`):

Dataset of Angi / HomeStars rows (phones, emails, address, person)

# 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 = {
    "searchType": "nearme",
    "market": "us",
    "category": "hvac",
    "categoryId": 107,
    "postalCode": "10001",
    "query": "",
    "ssaFilter": false,
    "enrichDetails": true,
    "mergeNearmeStreets": true,
    "maxResults": 3,
    "maxPages": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("lentic_clockss/angi-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 = {
    "searchType": "nearme",
    "market": "us",
    "category": "hvac",
    "categoryId": 107,
    "postalCode": "10001",
    "query": "",
    "ssaFilter": False,
    "enrichDetails": True,
    "mergeNearmeStreets": True,
    "maxResults": 3,
    "maxPages": 1,
}

# Run the Actor and wait for it to finish
run = client.actor("lentic_clockss/angi-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 '{
  "searchType": "nearme",
  "market": "us",
  "category": "hvac",
  "categoryId": 107,
  "postalCode": "10001",
  "query": "",
  "ssaFilter": false,
  "enrichDetails": true,
  "mergeNearmeStreets": true,
  "maxResults": 3,
  "maxPages": 1
}' |
apify call lentic_clockss/angi-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,lentic_clockss/angi-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/41kad1LRaygrFzyQD/builds/dkMLGxT7ekfAZbbIZ/openapi.json
