Angi Scraper avatar

Angi Scraper

Pricing

from $0.80 / 1,000 results

Go to Apify Store
Angi Scraper

Angi Scraper

[๐Ÿ’ฐ $0.8 / 1K] Extract contractor and home-service pro listings from Angi.com - business names, phone numbers, addresses, ratings, reviews, hours, and photos. Search by keyword and location, browse by category, paste Angi URLs directly. Optional per-pro reviews extraction.

Pricing

from $0.80 / 1,000 results

Rating

0.0

(0)

Developer

SolidCode

SolidCode

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Extract contractor and home-service pro listings from Angi.com at scale. Get business names, phone numbers, addresses, ratings, review counts, hours, sub-categories, logos, descriptions, and per-pro reviews โ€” for any trade in any US city or ZIP code. Built for lead-gen teams, market researchers, and anyone who needs structured data on local home-service pros without paying enterprise prices.

Why This Scraper?

  • $0.80 per 1,000 results โ€” among the cheapest Angi data on Apify, no per-page or compute surcharges.
  • Friendly inputs โ€” type a trade and a city or ZIP. No URL knowledge required.
  • 887 trade categories supported โ€” from Plumbing and HVAC to Junk Removal, Garage Doors, Concrete, and Pools & Spas. Search terms are mapped automatically to Angi's nearest matching category.
  • ZIP code lookup built in โ€” paste 78701 or Austin, TX โ€” both work.
  • NYC borough fan-out โ€” searching "New York, NY" automatically scrapes Manhattan, Brooklyn, Queens, the Bronx, and Staten Island, then de-dupes pros across them.
  • Two cost tiers โ€” Listing only for fast, cheap bulk discovery (name, city, ZIP, profile URL); Full profile for hours, full street address, phone, sub-categories, and description.
  • Optional review extraction โ€” flip on Include Reviews to also pull per-review rows (rating, body, author, date) into the same dataset.
  • Direct URL mode โ€” paste any Angi profile, listing, or category page URL when you want surgical control.
  • No setup, no configuration knobs โ€” works on the defaults; everything is opt-in.

Use Cases

Lead Generation

  • Build prospect lists of plumbers, electricians, roofers, or any trade in any city.
  • Target newly-listed pros or those with low review counts for outreach.
  • Pull phone and address data into a CRM for cold call campaigns.

Market Research & Competitive Intelligence

  • Map the density of HVAC contractors across a metro area.
  • Compare average ratings by trade between cities or ZIP codes.
  • Track how many years pros in a category have been in business.

Directory & Aggregator Sites

  • Populate a local-services directory with up-to-date pro listings.
  • Enrich existing business records with Angi ratings and review counts.
  • Build geographic coverage data for franchise expansion analysis.

Reputation & Review Analysis

  • Pull per-pro reviews to analyze sentiment, common complaints, or pricing signals.
  • Benchmark a single pro against the rest of their category in their city.
  • Monitor competitor reviews on a recurring schedule via the Apify scheduler.

Real Estate & Property Management

  • Build vendor lists for property managers in new markets.
  • Identify highly-rated pros across multiple service categories in a single ZIP.

Getting Started

Simplest โ€” One trade, one city

{
"searchTerms": ["plumber"],
"location": "Austin, TX"
}

Multi-trade in a major city by ZIP

{
"searchTerms": ["plumber", "electrician", "hvac"],
"location": "78701",
"maxResults": 50
}

Cheap bulk discovery (listing-only)

{
"category": "Roofing",
"location": "Phoenix, AZ",
"detailLevel": "listing",
"maxResults": 50
}

With per-pro reviews

{
"searchTerms": ["roofing"],
"location": "Phoenix, AZ",
"includeReviews": true,
"maxReviewsPerPro": 50
}

Direct URL โ€” pinpoint a specific listing or category

{
"startUrls": [
"https://www.angi.com/companylist/us/tx/austin/plumbing.htm"
],
"maxResults": 100
}

Single pro profile (with reviews)

{
"startUrls": [
"https://www.angi.com/companylist/us/tx/austin/we-plumb-reviews-10565886.htm"
],
"includeReviews": true
}

Input Reference

ParameterTypeDefaultDescription
searchTermsstring[]["plumber"]Keywords or service names (e.g. "plumber", "roof repair", "HVAC contractor"). Each term runs as its own search and is combined with the location. Mapped to Angi's nearest matching trade category.
locationstring"Austin, TX"City and state (e.g. "Austin, TX") or 5-digit US ZIP code (e.g. "78701"). Combined with each search term and category.
categorystringnullOptional trade to browse instead of (or alongside) free-text search terms. Pick from a dropdown of 30 common trades.

Service categories available in the dropdown

Plumbing, Electrical, Heating & Cooling (HVAC), Roofing, Painting, Landscaping, Lawn Care, Tree Service, Handyman, House Cleaning, Pest Control, Remodeling, Kitchen Remodeling, Bathroom Remodeling, Flooring, Carpet Cleaning, Appliance Repair, Garage Doors, Fencing, Decks & Patios, Pools & Spas, Movers, Junk Removal, Windows, Siding, Gutters, Concrete, Masonry, Drywall, General Contractors.

For trades outside this list, type the keyword into Search Terms โ€” it will be auto-mapped to the closest of Angi's 887 internal categories.

Direct URLs

ParameterTypeDefaultDescription
startUrlsstring[][]Paste any Angi URLs directly: pro profile pages, category hubs, city/state hubs, or listing pages. Scraped in addition to the keyword and category search above.

Limits

ParameterTypeDefaultDescription
maxResultsinteger100Maximum number of pros to return per search term, category, or start URL. Set to 0 for unlimited. The scraper stops requesting new pages once the cap is reached but keeps the full last page.

Output Detail

ParameterTypeDefaultDescription
detailLevelstring"full""Listing only (faster, cheaper)" returns just what's on the search result card. "Full profile (recommended)" also visits each pro's profile page for hours, photo gallery, full address, description, and the most complete contact info.
includeReviewsbooleanfalseWhen on, fetches each pro's reviews and emits them as separate rows in the dataset (one row per review). Adds to your billed result count โ€” a pro with 50 reviews counts as 51 results.
maxReviewsPerProinteger20Cap on how many reviews to collect per pro. Set to 0 to fetch every review available. Ignored when Include Reviews is off.

Output

Two record types are emitted to the same dataset, distinguished by the recordType field. Pros always come first; reviews (when enabled) follow each pro.

Pro record (recordType: "pro")

{
"recordType": "pro",
"proId": "10565886",
"name": "We Plumb",
"url": "https://www.angi.com/companylist/us/tx/austin/we-plumb-reviews-10565886.htm",
"category": "Plumbing",
"subCategories": ["Plumbing", "Drain Cleaning", "Water Heaters"],
"rating": 4.91,
"reviewCount": 138,
"phone": "5126581400",
"email": null,
"website": "https://weplumb.com",
"address": "641 Arrowood Place",
"city": "Austin",
"state": "TX",
"zip": "78745",
"hours": {
"Monday": "7:00 AM - 6:00 PM",
"Tuesday": "7:00 AM - 6:00 PM",
"Wednesday": "7:00 AM - 6:00 PM",
"Thursday": "7:00 AM - 6:00 PM",
"Friday": "7:00 AM - 6:00 PM",
"Saturday": "Closed",
"Sunday": "Closed"
},
"acceptsAppointments": null,
"yearsInBusiness": 12,
"description": "Family-owned plumbing company serving Austin and surrounding communities since 2014. Drain cleaning, water heater install, repipe, slab leak repair.",
"logoUrl": "https://media.angi.com/s3fs-public/...",
"images": [],
"searchTerm": "plumber",
"searchLocation": "Austin, TX",
"scrapedAt": "2026-04-26T23:57:06.698355+00:00"
}
FieldTypeDescription
recordTypestringAlways "pro".
proIdstringAngi's stable internal pro ID.
namestringBusiness name.
urlstringCanonical Angi profile URL.
categorystringPrimary service category (e.g. "Plumbing").
subCategoriesstring[]Other services the pro offers (full profile only). Empty list under Listing only.
ratingnumber | nullOverall star rating, rounded to 2 decimals (0โ€“5). May be null under Listing only for cards Angi doesn't ship a rating on.
reviewCountinteger | nullTotal number of reviews on Angi. May be null under Listing only for cards without an aggregate rating.
phonestring | nullPublic phone number (full profile only; 10-digit US format, e.g. "5126581400").
emailstring | nullAlways null โ€” Angi routes contact through its own system.
websitestring | nullExternal business website when shown in the description (best-effort).
addressstring | nullStreet address (full profile only).
citystring | nullCity.
statestring | null2-letter state code.
zipstring | null5-digit ZIP code.
hoursobject | nullPer-day operating hours (full profile only).
acceptsAppointmentsboolean | nullReserved for future use; currently null.
yearsInBusinessinteger | nullSelf-reported tenure (full profile only).
descriptionstring | nullBusiness description (full profile only).
logoUrlstring | nullLogo image URL.
imagesstring[]Reserved for future use; currently empty.
searchTermstring | nullThe keyword that surfaced this pro (when from a keyword search).
searchLocationstring | nullThe location label used for the search (e.g. "Manhattan, NY").
scrapedAtstringISO 8601 timestamp.

Review record (recordType: "review")

Emitted only when includeReviews is on. One row per review.

{
"recordType": "review",
"proId": "10565886",
"proName": "We Plumb",
"proUrl": "https://www.angi.com/companylist/us/tx/austin/we-plumb-reviews-10565886.htm",
"reviewId": "10565886-3",
"rating": 5.0,
"title": null,
"text": "Showed up on time, fixed the leak in 30 minutes, and explained exactly what they did. Highly recommend.",
"author": "Sarah M.",
"authorLocation": null,
"serviceDate": null,
"postedAt": "2026-03-14T00:00:00",
"serviceCategory": null,
"cost": null,
"scrapedAt": "2026-04-26T23:57:08.112441+00:00"
}
FieldTypeDescription
recordTypestringAlways "review".
proIdstringAngi's pro ID โ€” links the review back to its parent pro record.
proNamestringConvenience copy of the pro's business name.
proUrlstringConvenience copy of the pro's profile URL.
reviewIdstringStable per-scrape review ID ({proId}-{globalIndex}).
ratingnumber | nullReview star rating (0โ€“5).
titlestring | nullReview headline (currently null โ€” not exposed by Angi's structured data).
textstring | nullFull review body.
authorstring | nullReviewer display name.
authorLocationstring | nullReviewer city (currently null โ€” not in structured data).
serviceDatestring | nullDate the work was performed (currently null).
postedAtstring | nullISO 8601 timestamp of when the review was posted.
serviceCategorystring | nullCategory the review is about (currently null).
coststring | nullReported job cost (currently null).
scrapedAtstringISO 8601 timestamp.

Tips for Best Results

  • Use a 5-digit ZIP for precision โ€” "78701" is more targeted than "Austin, TX" and avoids ambiguity for cities that share names across states.
  • Major metros are auto-expanded โ€” searching "New York, NY" automatically fans out across Manhattan, Brooklyn, Queens, the Bronx, and Staten Island, then de-dupes pros so you don't pay twice for cross-borough listings.
  • Pick Listing only for cheap bulk discovery โ€” it returns name, city, ZIP, and profile URL on each card, with no per-pro page visits. Great for building seed lists you'll enrich later. Switch to Full profile when you need phone, hours, sub-categories, and the full description.
  • Reviews are billed per row โ€” turning on Include Reviews adds one billable result per review. A search returning 60 pros (typical for a single city), each with 25 reviews kept, costs ~1,560 results. Listing pool size varies by city โ€” large metros yield 50-150 unique pros per trade, smaller markets often 5-20. Use maxReviewsPerPro to cap the spend.
  • Use Direct URLs for surgical scrapes โ€” paste a single profile URL to grab one pro and its reviews; paste a city/category URL (e.g. https://www.angi.com/companylist/us/tx/austin/plumbing.htm) to walk a known listing without going through the keyword mapper.
  • Search terms are mapped to a category โ€” Angi search is category-based, not free-text. "exterminator" maps to "Pest Control", "AC" maps to "HVAC", etc. For full control over which category is used, pick from the dropdown or use Direct URLs.

Good to Know

  • Some contact fields aren't exposed by Angi. email is never returned โ€” Angi monetizes lead routing and hides the address. website is best-effort, parsed from the description when present. acceptsAppointments and the photo gallery beyond the logo are reserved fields and currently return null / [].
  • Some review-card fields aren't in Angi's structured data. title, authorLocation, serviceDate, serviceCategory, and cost are not exposed in machine-readable form; they're emitted as null.
  • Many markets serve "rotating featured" pros. Walking listing rows in any city often surfaces fewer unique pros than maxResults because Angi repeats featured pros across pages. The scraper de-dupes by pro ID before pushing โ€” so a maxResults: 100 run on a typical city may yield 30-60 unique pros, not 100.
  • Phone numbers are 10-digit US strings. No formatting โ€” apply your own (e.g. (512) 658-1400) downstream if needed.

Pricing

$0.80 per 1,000 results. No compute charges โ€” you only pay per result returned.

ResultsCost
100$0.08
1,000$0.80
10,000$8.00

Each pro counts as one result. When Include Reviews is on, each review is also one result โ€” a pro with 50 reviews counts as 51 results.

Integrations

Export your data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:

  • Zapier / Make / n8n โ€” Workflow automation.
  • Google Sheets โ€” Direct spreadsheet export.
  • Slack / Email โ€” Notifications on new results.
  • Webhooks โ€” Custom API integrations.
  • Apify API โ€” Full programmatic access.

This scraper is designed for legitimate business intelligence, market research, lead generation, and directory enrichment. You are responsible for complying with applicable laws, Angi's Terms of Service, and any data-protection regulations in your jurisdiction (CCPA, GDPR, etc.). Do not use the data for spam, harassment, or any unlawful purpose. Respect opt-outs and do-not-contact requests.