# angi.com (Angie's List) Scraper (`igolaizola/angi-scraper`) Actor

Extract verified business data from Angi (formerly Angie's List) including phone numbers, ratings, and contact details for home service professionals. Get comprehensive listings with company information, customer reviews, and contact data across 150+ categories like plumbers and contractors.

- **URL**: https://apify.com/igolaizola/angi-scraper.md
- **Developed by:** [Iñigo Garcia Olaizola](https://apify.com/igolaizola) (community)
- **Categories:** Lead generation, Jobs, Automation
- **Stats:** 356 total users, 25 monthly users, 98.6% runs succeeded, 25 bookmarks
- **User rating**: 5.00 out of 5 stars

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

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 (Angie's List) Scraper

### 🤖 What does Angi Scraper do?

Angi Scraper enables you to easily extract data from [angi.com](https://angi.com) about local home service professionals and their businesses.

Angi Scraper can collect detailed information about:

- 🏢 Business details and contact information
- ⭐ Ratings and reviews from verified customers
- 📍 Service areas and locations
- 🛠️ Services offered and specialties
- ⏰ Business hours and availability
- 💳 Payment methods accepted
- 📋 Licenses, certifications and credentials

### 💡 Why scrape angi.com?

Angi.com is one of the largest platforms connecting homeowners with local service professionals, making it an invaluable source of data for:

- 📊 Market research and competitive analysis
- 🎯 Lead generation for home service businesses
- 📈 Understanding pricing trends in different regions
- 🌟 Analyzing customer satisfaction and service quality
- 📍 Mapping service provider coverage areas
- 💼 Identifying business opportunities in the home services market

### 🚀 How to scrape angi.com

Getting started with Angi Scraper is simple:

1. Click on Try for free
2. Enter your search parameters:
   - Select the service category you're interested in
   - Specify zip codes to search within
   - Set maximum number of results to collect
3. Click Run
4. Once complete, preview or download your data from the Dataset tab

### 💳 Costs and Credit Usage

Apify provides you with $5 free usage credits every month on the [Apify Free plan](https://apify.com/pricing). You can use these to test Angi Scraper and see the results for yourself.

For regular data collection from angi.com, we recommend the [$49/month Personal plan](https://apify.com/pricing), which provides enough credits for multiple runs and consistent data gathering.

### 📝 Input Parameters

The scraper supports the following input parameters to customize your search:

| Parameter  | Type    | Required | Description                                                                                                                                                                                    |
| ---------- | ------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `maxItems` | Integer | Yes      | Maximum number of businesses to scrape (0 for unlimited). Default is 100.                                                                                                                      |
| `zipCodes` | Array   | No       | List of zip codes to search for service providers.                                                                                                                                             |
| `category` | String  | Yes      | Category of service providers to search for. Choose from 150+ predefined categories like "plumbing", "electrical", "landscaping", etc. See the INPUT section to check all available categories |

Example input:

```json
{
  "maxItems": 50,
  "zipCodes": ["90210", "90001"],
  "category": "plumbing"
}
```

### 📊 Results

The scraper provides comprehensive business information including:

- Business name and status
- Years in business
- Contact information (phone, website)
- Physical address
- Star rating and review count
- Customer grade (A-F)
- Business description
- Services offered
- Customer reviews and ratings
- Awards and certifications
- Service area coverage
- Business hours
- Payment options
- Licensing information

Example output:

```json
{
  "uuid": "00123123-1234-1234-1234-123123123123",
  "contactInfo": {
    "phoneNumbers": [
      {
        "type": "Primary",
        "phoneNumber": "5123123123"
      }
    ],
    "website": "",
    "address": {
      "street1": "123 Unknown Street",
      "city": "Union City",
      "state": "NJ",
      "country": "USA",
      "postalCode": "07087"
    }
  },
  "businessInfo": {
    "legacyId": "111111111",
    "primaryAddressId": 0,
    "businessName": "John Doe Pro Plumbing",
    "businessDescription": "John Doe is committed to excellence in every aspect of our business.",
    "inBusinessSince": 2022,
    "hoursInfo": {
      "hoursInfoDetail": [
        {
          "startTime": 0,
          "endTime": 0,
          "dayOfWeek": 1,
          "isClosed": true
        },
        {
          "startTime": 0,
          "endTime": 0,
          "dayOfWeek": 2,
          "isClosed": true
        }
      ],
      "acceptsAppointments": false
    },
    "advertiser": true,
    "onAngiSince": "2024-11-23",
    "amenities": {
      "ecoFriendlyAccreditations": false,
      "emergencyServices": false,
      "emergencyService": false,
      "freeEstimates": false,
      "warranties": false,
      "warrantiesOffered": false,
      "seniorDiscount": false,
      "seniorDiscountValue": ""
    },
    "paymentOptions": ["CreditCard"],
    "licenses": [],
    "insured": false,
    "bonded": false,
    "status": "Active",
    "businessHighlights": [
      {
        "name": "SeHablaEspanol",
        "description": "Se Habla Español",
        "iconUrl": ""
      },
      {
        "name": "VeteranOwned",
        "description": "Veteran Owned \u0026 Operated",
        "iconUrl": ""
      }
    ]
  },
  "logoUrl": "",
  "images": [],
  "awards": [
    {
      "name": "SEAL_OF_APPROVAL",
      "description": "Seal of Approval",
      "url": "/images/sp-badges/soap"
    },
    {
      "name": "ONE_YEAR_WITH_HA",
      "description": "One Year With HomeAdvisor",
      "url": "/images/sp-badges/1year"
    }
  ],
  "proShowcases": {
    "showcases": [],
    "totalShowcases": 0
  },
  "offers": [],
  "noIndex": false,
  "slug": {
    "canonical": "/companylist/us/nj/union-city/jdoe-pro-plumbing-reviews-1.htm",
    "aliases": [""]
  },
  "eligibleForRaq": false,
  "spProperties": [],
  "combinedMetrics": {
    "reviewMetrics": {
      "gradeCounts": [
        {
          "grade": "C",
          "count": 0,
          "starRating": 3
        },
        {
          "grade": "B",
          "count": 0,
          "starRating": 4
        },
        {
          "grade": "A",
          "count": 1,
          "starRating": 5
        },
        {
          "grade": "D",
          "count": 0,
          "starRating": 2
        },
        {
          "grade": "F",
          "count": 0,
          "starRating": 1
        }
      ],
      "ratingTypeMetrics": [
        {
          "ratingType": "Price",
          "gpa": 0,
          "grade": "A",
          "count": 0,
          "starRating": 5
        },
        {
          "ratingType": "Responsiveness",
          "gpa": 0,
          "grade": "A",
          "count": 0,
          "starRating": 5
        },
        {
          "ratingType": "Quality",
          "gpa": 0,
          "grade": "A",
          "count": 0,
          "starRating": 5
        },
        {
          "ratingType": "Overall",
          "gpa": 0,
          "grade": "A",
          "count": 1,
          "starRating": 5
        }
      ],
      "count": 1,
      "showGoogleReview": false
    },
    "displayMetrics": {
      "gpa": 0,
      "grade": "A",
      "reviewCount": 1,
      "starRating": 5
    },
    "allCategoriesMetrics": {
      "allTimeGrade": "",
      "allTimeReviewCount": 0,
      "allTimeGPA": 0,
      "recentReviewCount": 0,
      "recentGPA": 0,
      "recentGrade": ""
    }
  },
  "reviews": [
    {
      "id": 18833265,
      "source": "HomeAdvisor",
      "willHireAgain": true,
      "workCompleted": true,
      "displayName": "L F.",
      "reviewText": "No comments.",
      "categories": [],
      "reportDate": "2022-09-07",
      "ratings": [
        {
          "ratingType": "Professionalism",
          "grade": "",
          "starRating": 0
        },
        {
          "ratingType": "Responsiveness",
          "grade": "A",
          "starRating": 5
        },
        {
          "ratingType": "Price",
          "grade": "A",
          "starRating": 5
        },
        {
          "ratingType": "Punctuality",
          "grade": "",
          "starRating": 0
        },
        {
          "ratingType": "Overall",
          "grade": "A",
          "starRating": 5
        },
        {
          "ratingType": "Quality",
          "grade": "A",
          "starRating": 5
        }
      ],
      "media": [],
      "showConsumerName": true,
      "isGoogleReview": false
    }
  ],
  "similarSps": [],
  "geoInfo": {
    "path": "us/nj/union-city",
    "displayName": "Union City"
  },
  "ecoFriendlyAccreditations": {
    "leedAccredited": false,
    "energyStarPartner": false,
    "epaLeadSafeCertified": false,
    "greenProductWorkPracticeProfessional": false
  },
  "serviceAreaPostalCodes": ["10150", "10024", "10211"]
}
```

### ⚖️ Legal Considerations

Web scraping should be done responsibly and in accordance with the website's terms of service. Consider the following:

- Respect the website's robots.txt file
- Don't overload the website's servers
- Be mindful of personal data protection regulations like GDPR
- Review Angi's terms of service before scraping
- Use the data in accordance with applicable laws and regulations

If you're unsure about the legality of your use case, consult with legal professionals. For more information about web scraping legality, check our blog post: [is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/)

# Actor input Schema

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

Maximum number of companies to scrape (0 for unlimited)

## `zipCodes` (type: `array`):

List of zip codes to search for providers

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

Category of home service providers to search for

## Actor input object example

```json
{
  "maxItems": 30,
  "category": "plumbing"
}
```

# Actor output Schema

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

No description

# API

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

## JavaScript example

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

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

// Prepare Actor input
const input = {
    "category": "plumbing"
};

// Run the Actor and wait for it to finish
const run = await client.actor("igolaizola/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 = { "category": "plumbing" }

# Run the Actor and wait for it to finish
run = client.actor("igolaizola/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 '{
  "category": "plumbing"
}' |
apify call igolaizola/angi-scraper --silent --output-dataset

```

## MCP server setup

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