# Auto Repair Shop Leads — Phones, Sites & Ratings (`scrapersdelight/repairpal-scraper`) Actor

Scrape RepairPal auto repair shop leads by US city — name, phone, website, address, rating, review count, warranty, hours & certification. Clean CSV/JSON for automotive marketing, parts, SaaS & franchise prospecting. No login.

- **URL**: https://apify.com/scrapersdelight/repairpal-scraper.md
- **Developed by:** [Scrapers Delight](https://apify.com/scrapersdelight) (community)
- **Categories:** Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$2.70 / 1,000 per auto repair shop returneds

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/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

## 🔧 Auto Repair Shop Leads — Phones, Sites & Ratings

**Turn RepairPal into a clean US auto repair shop lead list — name, phone, own website, full address, rating, review count, warranty terms and opening hours — one flat JSON record per shop. No login, no API key, no copy-paste.**

> 🕒 Last updated: 2026-07-30 · 📊 36 fields per lead · 🇺🇸 US coverage, city by city · 🚫 No login or API key · ☎️ Phone on 100% of rows · 🌐 Own website on ~81%

Give it a city — `San Francisco, CA` — and get back **every RepairPal-listed repair shop in that market**, each with a direct phone number, the shop's own website, a star rating, review count, the warranty it offers and its weekly hours. Export to JSON, CSV, Excel or Google Sheets, or pull it into your CRM / outreach tool via API.

***

### What it does

- 🏙️ **City-by-city lead pulls** — type `Chicago, IL` (or paste a RepairPal URL) and it walks the whole listing, paginating automatically until the city is exhausted.
- ☎️ **Contact fields that actually close** — business name, formatted phone, the shop's **own website**, and full street address (street, city, state, ZIP + lat/lng).
- ⭐ **Reputation & quality signals** — star rating, review count, RepairPal's quality / fair-price scores and "fixed right first time" percentage.
- 🛡️ **Warranty & credentials** — warranty mileage and months (or lifetime), state repair-licence number where published, and the year the shop was established.
- 🔧 **Service mix & amenities** — service specialties (`Transmission & Drivetrain`, `Collision Repair & Paint`, `Hybrid Vehicle`, `ADAS`…) and shop amenities (loaner, shuttle, Wi-Fi, languages spoken).
- 🕒 **Hours** — a clean weekly schedule plus open-now / next-open / next-close.
- 🔎 **Filters** — keyword, minimum rating, minimum review count, website-only.
- 🧹 **Deduped across cities** — neighbouring cities overlap heavily (Miami + Hialeah returned 68 raw rows → 41 unique). Repeats are collapsed by shop ID **before** delivery, so you are never charged twice for the same shop.

### 📊 Output — one flat record per shop

| Field | Type | Example |
|---|---|---|
| 🆔 `shop_id` | number | `298620` |
| 🏷️ `name` | text | `The Garage - San Francisco` |
| ☎️ `phone` | text | `(415) 813-4013` |
| 🌐 `website` | link | `http://www.thegaragesf.com` |
| 📍 `street` / `city` / `state` / `zip` | text | `340 10th Street` / `San Francisco` / `CA` / `94103` |
| 🗺️ `latitude` / `longitude` | number | `37.7720348` / `-122.412504` |
| ⭐ `rating` / `review_count` | number | `4.7` / `1782` |
| 🏅 `quality_score` / `fair_price_score` / `fixed_right_percent` | number | `4.8` / `4.4` / `94` |
| 📅 `year_established` | number | `1994` |
| 🛡️ `warranty` / `warranty_miles` / `warranty_months` / `lifetime_warranty` | text/number/bool | `24,000 mile / 24-month warranty` |
| 🪪 `license_number` | text | `282495` |
| 🚗 `is_dealer` | bool | `false` |
| 🕒 `hours` | array | `[{"day":"Monday","opens":"08:00","closes":"17:00"}, …]` |
| 🔓 `open_now` / `next_open` / `next_close` / `open_on_weekends` | bool/date | `false` / `2026-07-30T15:00:00.000Z` |
| 📆 `appointments_enabled` | bool | `true` |
| 🔧 `service_specialties` | array | `["Brakes","Transmission & Drivetrain","Hybrid Vehicle"]` |
| ☕ `amenities` | array | `["Coffee","Wireless Internet","Customer Restroom"]` |
| 📝 `about` / `shop_message` | text | shop description in its own words |
| 🖼️ `image_url` | link | `https://images.repairpal.com/vdz30j…` |
| 🔗 `url` | link | RepairPal shop page |
| 📏 `distance_mi` | number | `0.52` (from the city centre) |
| 🕒 `scraped_at` | date | `2026-07-30T…Z` |

<details><summary>🔧 Sample shop record</summary>

```json
{
  "shop_id": 298620,
  "name": "The Garage - San Francisco",
  "url": "https://repairpal.com/auto-repair-near-me/auto-repair-in-san-francisco-california/the-garage-san-francisco",
  "phone": "(415) 813-4013",
  "website": "http://www.thegaragesf.com",
  "street": "340 10th Street", "city": "San Francisco", "state": "CA", "zip": "94103",
  "latitude": 37.7720348, "longitude": -122.412504,
  "rating": 4.7, "review_count": 1782,
  "quality_score": 4.8, "fair_price_score": 4.4, "fixed_right_percent": 94,
  "year_established": 1994, "is_dealer": false, "license_number": "282495",
  "warranty": "24,000 mile / 24-month warranty",
  "warranty_miles": 24000, "warranty_months": 24, "lifetime_warranty": false,
  "distance_mi": 0.52,
  "open_now": false, "open_on_weekends": false, "appointments_enabled": true,
  "hours": [{ "day": "Monday", "opens": "08:00", "closes": "17:00" }],
  "service_specialties": ["Brakes", "Transmission & Drivetrain", "Hybrid Vehicle"],
  "amenities": ["Coffee", "Wireless Internet", "Customer Restroom"],
  "image_url": "https://images.repairpal.com/vdz30jpq17dlmm73l2mvj68phh1f",
  "scraped_at": "2026-07-30T12:00:00.000Z"
}
```

</details>

> 💡 Phone and address are on **100%** of rows and the shop's own website on **~81%** — enough to run outreach the same day, or to feed a website into an email-finder as a second step.

***

### Who it's for

- 🧾 **Shop-management SaaS** (Tekmetric, Shopmonkey, Mitchell 1 and challengers) building geo-targeted prospect lists.
- 🔩 **Parts distributors & tool/equipment vendors** mapping independent shops market by market.
- 📣 **Marketing & lead-gen agencies** assembling automotive contact lists by city and service specialty.
- 🏢 **Franchise & acquisition teams** screening independents by rating, review volume, warranty and year established.
- 📊 **Analysts** measuring shop density, service mix and quality scores across US metros.

### How to use it

1. Click **Try for free**.
2. Type one or more **Cities** — `San Francisco, CA`, `Chicago, IL` — or paste a full RepairPal URL such as `https://repairpal.com/auto-repair-in-chicago-illinois`.
3. *(Optional)* set a **Keyword filter**, **Minimum rating**, **Minimum review count**, **Only shops with a website**, **Max shops per city** and **Max results**.
4. Click **Start**. Export from the **Dataset** tab (JSON, CSV, Excel, Google Sheets) or via API.

#### Examples

Two metros, everything they list:

```json
{ "cities": ["San Francisco, CA", "Chicago, IL"], "maxItems": 0 }
```

Transmission specialists in Miami, rated 4+ and with a website (ready for email enrichment):

```json
{ "cities": ["Miami, FL"], "keyword": "transmission", "minRating": 4, "onlyWithWebsite": true }
```

Even coverage across many markets — 10 shops each:

```json
{ "cities": ["Dallas, TX", "Houston, TX", "Austin, TX", "San Antonio, TX"], "maxShopsPerCity": 10, "maxItems": 0 }
```

***

### ❓ FAQ

**Do I need a login or API key?** No. It reads RepairPal's public city listing pages — no account, no key, no captcha.

**How much does it cost?** Pay-per-shop — about **$2.70 per 1,000 shops** returned. A single-city run is a few cents, and it's free to try.

**How many shops does a city return?** Whatever RepairPal lists for that market — typically **1–50**. Big metros (Chicago, Dallas, Denver, Phoenix, NYC) cap out around 50; a small town like Tulare, CA returns 6. The Actor paginates until the city is exhausted.

**Do I get the shop's own website?** Yes, when RepairPal publishes it — that was **~81%** of shops across a 672-shop test spanning 18 metros. Turn on *Only shops with a website* to keep just those rows.

**What about the `license_number` field?** It is the state repair-licence number and it is only published for some states (mostly California's BAR ARD number) — expect a low fill rate outside CA. Treat it as a bonus field, not a core one.

**Are dealerships included?** RepairPal's certified network is almost entirely independents — 0 of 278 shops sampled across six large metros were flagged as dealerships. The `is_dealer` flag is still returned per row.

**Which proxy should I use?** Leave the default (**Apify Residential, US**). RepairPal is behind a Cloudflare challenge that datacenter IPs never clear — measured 0 results on datacenter vs 18/18 cities on residential.

**Can I export to Excel or Google Sheets?** Yes — the dataset exports to JSON, CSV, Excel or Google Sheets, or pull it via API.

### Notes & fair use

You are responsible for complying with RepairPal's Terms of Service. This Actor reads publicly available business listings (factual business-contact data — shop name, business phone, business address, published ratings). Where any row constitutes personal data in your jurisdiction, handling it lawfully is your responsibility.

# Actor input Schema

## `cities` (type: `array`):

US cities to scrape, one per line. Use "City, ST" (e.g. "San Francisco, CA"), "City, State", or paste a full RepairPal listing URL such as https://repairpal.com/auto-repair-in-chicago-illinois . Each city returns every RepairPal-listed shop for that area (typically 1-50).

## `keyword` (type: `string`):

Optional. Keep only shops whose name, service specialties or description contain this text (case-insensitive) — e.g. "transmission", "collision", "hybrid", "tire".

## `minRating` (type: `integer`):

Optional. Drop shops rated below this (0-5). Leave empty for no rating filter.

## `minReviews` (type: `integer`):

Optional. Drop shops with fewer than this many reviews — a quick proxy for shop size.

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

Keep only shops that publish their own website URL (~84% do) — useful when the next step is email enrichment.

## `maxShopsPerCity` (type: `integer`):

Cap rows taken from each city (0 = every shop the city lists). Useful for even coverage across many cities.

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

Cap on shops returned this run (cost/speed guard). Default 100; set 0 for everything in scope.

## `proxyConfiguration` (type: `object`):

RepairPal is behind a Cloudflare challenge that only clears on RESIDENTIAL US IPs — datacenter proxies return 0 results. Keep the default unless you know what you are changing.

## Actor input object example

```json
{
  "cities": [
    "San Francisco, CA",
    "Chicago, IL"
  ],
  "onlyWithWebsite": false,
  "maxShopsPerCity": 0,
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

## `records` (type: `string`):

The dataset of scraped RepairPal shops (one item per shop).

# 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 = {
    "cities": [
        "San Francisco, CA",
        "Chicago, IL"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapersdelight/repairpal-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 = { "cities": [
        "San Francisco, CA",
        "Chicago, IL",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("scrapersdelight/repairpal-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 '{
  "cities": [
    "San Francisco, CA",
    "Chicago, IL"
  ]
}' |
apify call scrapersdelight/repairpal-scraper --silent --output-dataset

```

## MCP server setup

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