Angi Scraper — Pros, Reviews & Contacts avatar

Angi Scraper — Pros, Reviews & Contacts

Pricing

from $3.00 / 1,000 results

Go to Apify Store
Angi Scraper — Pros, Reviews & Contacts

Angi Scraper — Pros, Reviews & Contacts

Search any US trade by city and get Angi's home-service pros as clean JSON: ratings, reviews, services, service areas, addresses, websites, emails, phones, and social profiles — streamed to your dataset in real time. Free plans return a sample.

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

Emmanuel

Emmanuel

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

Angi Real-Time Data

Collect Angi's home-service pro directory as clean, structured JSON — search any trade in any US market, read full business profiles, capture public reviews, and enrich every business with the contact details it publishes (website, emails, phones, social profiles). Results stream straight to your dataset as they are collected, so you can watch rows arrive and start working with them immediately.

Angi is the largest US marketplace for home services: roofers, plumbers, HVAC pros, electricians, cleaners, landscapers, general contractors and hundreds more trades, each with ratings, review counts, service lists, service areas, and verification badges. This Actor turns that directory into a dataset your CRM, outreach tool, or research pipeline can use.

Free trial: on a free Apify plan this Actor returns a small sample (2 results) per run so you can confirm the output before upgrading. Paid plans get the full, uncapped output.


Who it is for

  • Local marketing and SEO agencies building prospect lists by trade and city
  • Lead-gen teams feeding CRM and outreach sequences with verified business contact details
  • Home-service brands and distributors mapping who operates in a market and what they offer
  • Market researchers sizing trades across metros and tracking ratings and review volumes
  • Data teams and AI agents that need a steady, structured feed of business and review rows

Use cases

  1. Build a city prospect list — every roofing company in Austin, TX with rating, review count, phone, and website.
  2. Niche trade expansion — run house cleaning in 25 metros and compare review volumes to find underserved markets.
  3. CRM enrichment — match on business name and profile link, then write in the verified website, emails, and social profiles.
  4. Reputation monitoring — collect public reviews per business on a schedule and watch new feedback land in your dataset.
  5. Competitive mapping — pull all general contractors in a market and compare service lists, amenities, and warranties.
  6. AI agent research — let an agent search a trade, read the rows, and summarise the competitive landscape.

Features at a glance

CheckboxDefaultWhat it returns
🔎 Pro searchonOne row per business from a trade + US city search.
📋 Profile detailsoffEnriches each business in place: street address, published website, full service list, star breakdown, about text, business highlights, amenities, accepted payments, FAQs.
⭐ ReviewsoffOne row per public review: reviewer, date, stars, verified flag, recommendation, project cost, text, and the pro's reply.
🎯 Lead detailsonEnriches each business in place: verified website, email addresses, phone numbers, and social profiles.
🔗 Scrape By URLoffReads specific Angi business profile links instead of searching.

Profile details and lead details enrich the same row — they never remove businesses and never create a second row, so your result count (and your cost) stays predictable. Every business found is exported.


Quick start

The default input runs a roofers-in-Austin search and returns 10 businesses. Press Start and rows begin streaming to the dataset.

{
"enableProSearch": true,
"searchTasks": [{ "category": "roofing", "location": "Austin, TX", "maxResults": 10 }],
"enableLeadDetails": true
}

For the fullest record per business, turn on Profile details as well:

{
"enableProSearch": true,
"searchTasks": [{ "category": "plumber", "location": "Chicago, IL", "maxResults": 50 }],
"enableProfileDetails": true,
"enableReviews": true,
"maxReviewsPerBusiness": 25,
"enableLeadDetails": true,
"maxItems": 2000
}

Input reference

FieldTypeDefaultNotes
enableProSearchbooleantruePrimary feature.
searchTasksarrayroofers in Austin, TXOne row per trade + market.
searchTasks[].categorystring"roofing"Trade or service. Everyday names work: plumber, ac repair, house cleaning, tree service.
searchTasks[].locationstring"Austin, TX"US city with state. The state is required.
searchTasks[].maxResultsintegerfrom maxResultsPerTaskCap for this row.
maxResultsPerTaskinteger10Default cap per row.
maxPagesPerTaskinteger5Safety cap on how deep a single search may go.

Verified examples: roofing in Austin, TX · plumbing in Los Angeles, CA · hvac in Chicago, IL · house cleaning in Seattle, WA · handyman-service in Manhattan, NY · tree service in Atlanta, GA.

Everyday trade names are matched to the trade Angi publishes, so plumber finds plumbers and ac repair finds HVAC pros. Some very large metros are split into named areas — if a search comes back empty, try the specific area (for example Manhattan, NY instead of New York, NY).

📋 Profile details

FieldTypeDefaultNotes
enableProfileDetailsbooleanfalseEnriches each business in place. Every business is still exported.

⭐ Reviews

FieldTypeDefaultNotes
enableReviewsbooleanfalseAdds one row per public review. Review rows count toward maxItems.
maxReviewsPerBusinessinteger101–200.

🎯 Lead details

FieldTypeDefaultNotes
enableLeadDetailsbooleantrueAdds verified website, email(s), phone(s), and social profiles where publicly available. Enriches rows in place — never filters them.

🔗 Scrape By URL

FieldTypeDefaultNotes
enableScrapeByUrlbooleanfalseReads specific business profiles instead of searching.
scrapeUrlsarray[]Angi business profile links, one per line.

Example link: https://www.angi.com/companylist/us/tx/austin/quick-roofing-llc-reviews-10944876.htm

⚙️ Output & limits

FieldTypeDefaultNotes
maxItemsinteger10000Global cap on all rows (businesses + reviews). The run also respects your maximum cost for this run.
concurrencyinteger6Parallel detail lookups (1–8).
delayBetweenRequestsMsinteger2500–5000. Higher is gentler and slower.

🔔 Notifications

FieldTypeDefaultNotes
webhookUrlstring""Optional. Every record is always saved to the dataset — this adds a real-time POST per record.
webhookFormatstring"json"json sends the full record; slack sends a Slack-ready message.

🌐 Connection

Apify Residential connection is used by default, pinned to the United States. Change the country or supply your own connections under Proxy settings if you need to.


Output

Every row is written to the default dataset. OUTPUT in the key-value store holds the run summary.

Summary shape

{
"totalPushed": 10,
"totalPros": 10,
"totalReviews": 0,
"tasksRequested": 1,
"tasksCompleted": 1,
"profileDetailsEnabled": false,
"reviewsEnabled": false,
"leadDetailsEnabled": true,
"errors": [],
"spendingLimitReached": false,
"paywall": {
"detected": true,
"isPaying": true,
"pricingTier": "BRONZE",
"limited": false,
"blocked": false,
"freeTierMaxItems": null
}
}

Business rows (type: "pro")

FieldDescription
nameBusiness name
profileUrlLink to the business profile
proIdDirectory id parsed from the link
category / categoryLabelTrade slug and readable trade
servicesServices the business offers
rating / reviewCount / reviewBreakdownStar rating, total reviews, and per-star percentages
locationFull address when Profile details is on
street / city / state / zipCodeAddress parts
areaServedArea the business serves
phone / phonesPhone numbers found publicly
website / websiteDomain / websiteConfidence / websiteScoreVerified website and how strongly it was matched
email / emailsEmail addresses found publicly
socials / facebookUrl / instagramUrl / linkedinUrlSocial profiles
descriptionAbout-the-business text
businessHighlightsHighlights such as veteran owned or emergency service
amenitiesAmenities such as free estimates and warranties
badgesDirectory badges such as Approved
acceptedPaymentsAccepted payment methods
faqsBusiness FAQs with answers
inBusinessSince / yearsInBusinessTrading history
responseTime / homeownerRecommendation / recentQuoteRequestsResponse and demand signals
reviewSnippetFeatured review excerpt
logoUrl / imageUrl / imagesBranding and project images
detailsFetchedtrue once the full profile has been merged
leadDetailstrue once contact details have been merged
searchTaskLabel / searchTaskIndex / positionWhich search produced the row and where it ranked
scrapedAtCollection timestamp (ISO 8601)

Review rows (type: "review")

FieldDescription
proName / proId / profileUrlThe business the review belongs to
authorReviewer name as published
date / dateTextISO date and the date exactly as shown
ratingStar rating
verifiedWhether the review is marked verified
recommendWhether the reviewer recommends the business
projectCostProject cost when the reviewer shared it
bodyReview text
responseFromProThe business's reply
scrapedAtCollection timestamp (ISO 8601)

Dataset views Overview, Businesses, and Reviews are preconfigured in the Apify Console.


Webhooks

Set webhookUrl and every record is POSTed the moment it is saved — the dataset always receives it too. Delivery problems never stop the run.

JSON format posts the full record object:

{
"type": "pro",
"name": "Quick Roofing LLC",
"rating": 4.9,
"reviewCount": 98,
"website": "https://quickroofing.com/",
"email": "office@quickroofing.com",
"profileUrl": "https://www.angi.com/companylist/us/tx/austin/quick-roofing-llc-reviews-10944876.htm"
}

Slack format posts a short message:

{
"text": ":hammer_and_wrench: *Quick Roofing LLC*\n*Trade:* Roofing\n*Rating:* 4.9 (98 reviews)\n*Website:* https://quickroofing.com/"
}

Paste a Slack incoming-webhook URL and choose slack to get a card per business (and a review card per review). Works equally well with Zapier, Make, n8n, or your own receiver.


Use it from an AI agent (Apify MCP)

This Actor is callable as a tool through Apify's MCP server, so an assistant can pull live home-service data on demand. Add the Actor to your MCP client and ask in plain language.

Example question:

"Find roofers in Austin, TX with lead details on, then rank them by rating and review count and tell me which three have the strongest online presence."

Your agent calls the Actor, reads the dataset rows, and answers with real businesses, ratings, and links.


FAQ

Do I need my own proxies? No. Apify's Residential connection is preconfigured and pinned to the United States.

How much does a run cost? You are charged per result exported. Set maxItems and your maximum cost for the run to stay in full control; the run finishes gracefully when either limit is reached.

What happens on a free plan? A free run returns a small sample (2 results) so you can inspect the output. Upgrading removes the cap.

How fresh is the data? Every run reads live data at the moment it runs. Schedule the Actor to keep a dataset current.

Why did a search return no businesses? Either the trade and market have no listed pros, or the metro is split into named areas — try the specific area, for example Manhattan, NY instead of New York, NY.

Do profile details and lead details change how many rows I get? No. Both enrich a business in place. The number of businesses exported is exactly the number found by your search.

Can I get one row per review instead of one row per business? Yes — turn on Reviews. Each review becomes its own row linked to its business, and review rows count toward maxItems.

Are phone numbers and emails always present? They are included when the business publishes them publicly. When none are found the row is still exported with the fields left empty — nothing is invented.

Can I collect a specific business I already know? Yes. Turn on Scrape By URL and paste the profile link.