# 🔧 Auto Repair Shop Leads Scraper - Garage Emails & Phones (`renzomacar/auto-repair-leads-scraper`) Actor

Independent mechanics, collision and transmission shops, tire stores and quick lubes for any metro, with phone, website, emails and socials extracted live from each shop's site. For aftermarket parts, shop SaaS and agencies. $8 per 1,000 leads.

- **URL**: https://apify.com/renzomacar/auto-repair-leads-scraper.md
- **Developed by:** [Renzo Madueno](https://apify.com/renzomacar) (community)
- **Categories:** Lead generation, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $8.00 / 1,000 leads

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

## 🔧 Auto Repair Shop Leads Scraper — Garage Emails & Phones

There are roughly 160,000 independent repair shops in the US alone, and the aftermarket that sells to them — parts distribution, shop-management software, diagnostic equipment, lifts, training, marketing, insurance, financing — has no clean way to reach them. Shops are not on LinkedIn. Half do not have a real website. The trade databases that do cover them are expensive and annual.

This Actor takes a different route: it reads the live map for any city and enriches each shop from its own site, returning **shop name, phone, website, address, emails and social profiles** at $8 per 1,000 shops.

### Six shop types, six different buyers

The `Shop types` multi-select is not cosmetic — these segments buy completely different things:

1. **Auto repair shop (general)** — the core independent mechanic; buys parts, software, training
2. **Auto body / collision shop** — insurance-driven, buys paint, frame equipment, DRP tooling
3. **Transmission repair shop** — specialist, high ticket, small population per metro
4. **Tire shop** — volume retail, buys inventory systems and alignment equipment
5. **Oil change / quick lube** — throughput operations, often small chains
6. **Diesel & fleet repair shop** — commercial accounts, biggest deal sizes

Pick the ones matching your product; every row is tagged with the `searchQuery` that surfaced it, so a mixed run stays sortable. Anything else — brake shops, mobile mechanics, EV specialists, RV repair — goes in `searchQueries` as free text.

### Reading the "no website" signal correctly

In most verticals a missing website is a dead lead. In auto repair it is the opposite: **it is the qualification.** A shop with no site and no email is the shop still running paper tickets, no scheduling software, no digital vehicle inspection and no review-generation. That is precisely the account an aftermarket SaaS or marketing agency wants — and it always has a phone number in this dataset.

So keep `onlyWithWebsite: false` (the default) if you sell modernization. Flip it to `true` only if your motion is email-only and you would rather not pay for rows you cannot use. Dropped rows are never charged either way.

### Every row contains

`name` · `category` · `phone` + `websitePhones[]` · `website` · `email` + `emails[]` + `emailFound` · `socialProfiles` · `address`/`city`/`country` · `rating` + `reviewsCount` · `techStack[]` · `placeUrl` · coordinates · `searchQuery`. Export CSV/Excel/JSON or pull through the API into your CRM or dialer.

### Territory planning, not just lists

Because every row carries coordinates and a parsed address, a run doubles as a territory map: count shops per zip to size a rep's patch, cluster them for a route-based sales day, or check density before opening a distribution branch. Run the same query monthly on an Apify schedule and the diff shows you new shops opening and closed ones disappearing — a churn signal you cannot buy.

### Cost

$0.008 per shop delivered ($8 per 1,000) plus $0.01 per run start. A full metro across all six shop types typically returns 400–900 shops: **$3.20 to $7.20**. No subscription, no annual database license, no per-seat pricing.

### Example input

```json
{
  "location": "Columbus, OH",
  "keywords": ["auto repair shop", "auto body shop", "tire shop"],
  "maxResults": 200,
  "maxPagesPerSite": 2
}
```

Regional sweep: `"searchQueries": ["auto repair shop in Cleveland, OH", "auto repair shop in Cincinnati, OH"]`.

### FAQ

**What percentage of shops have an email?**
Lower than white-collar niches — realistically 30–50% of shops that have a website at all, and a meaningful share have no website. This is a phone-first vertical, which is why every row keeps the number. Use `emailFound` to route leads into the right channel instead of expecting one file to do both.

**Do I get chains like Midas, Jiffy Lube or Firestone?**
Yes, franchise locations appear as normal listings. They share a corporate domain, so dedupe on `website` to isolate independents — usually the segment worth selling to, since franchisees buy through corporate.

**Can I find fleet and commercial shops specifically?**
Select `Diesel & fleet repair shop`, and add terms like "fleet maintenance" or "truck repair" in `searchQueries`. These are the largest tickets in the vertical and the thinnest population per city, so run several metros at once.

**How do I judge shop size from the data?**
`reviewsCount` is the best available proxy — a 6-bay shop accumulates reviews far faster than a 2-bay one. Combined with `rating`, it separates busy well-run shops from struggling ones, which usually changes your pitch.

**Is the data live or from a database?**
Live at run time. Shop turnover in this trade is high — ownership changes, closures, rebrands — so a scrape run today reflects today, not last year's export.

**Can I schedule refreshes?**
Yes. Set an Apify schedule on the same input and compare datasets month to month; new entries are new shops, missing ones have closed or delisted.

**Do you scrape anything about vehicles or customers?**
No. Only publicly listed business information and the contact details shops publish on their own websites. No consumer, vehicle or repair-order data is involved.

**Any compliance caveats?**
Standard ones: the data is public business information, but your outreach must follow CAN-SPAM, GDPR where applicable, and TCPA rules if you call or text shop numbers — many are mobile lines.

### Collision and auto body shops

Body shops are a different business from mechanical repair: insurance-driven revenue, paint and materials supply chains, DRP relationships, and estimating software nobody in a general repair shop uses.

```
auto body shop in Grand Rapids, MI
collision repair center in Wyoming, MI
auto paint shop in Kentwood, MI
dent repair service in Grandville, MI
auto glass repair shop in Grand Rapids, MI
```

Custom search queries replace the shop-type picker and `location`, so each line names its own city. Body shops maintain better websites than mechanical shops — insurers expect it — which shows up as higher email coverage and a `contactPageUrl` on most rows.

### Diesel, fleet and heavy-duty shops

The commercial end of vehicle repair, and the segment with real purchasing budgets:

```
diesel repair shop in Laredo, TX
fleet maintenance company in San Antonio, TX
truck repair shop in Houston, TX
mobile diesel mechanic in Dallas, TX
trailer repair shop in El Paso, TX
```

Fleet shops answer the phone at six in the morning and buy parts, lifts, diagnostic tooling and shop-management software by the year rather than the month. They cluster along freight corridors, not evenly across a metro — so run the queries against the industrial suburbs rather than the city centre.

### Transmission, exhaust and single-service specialists

```
transmission repair shop in Jacksonville, FL
muffler and exhaust shop in Jacksonville, FL
radiator repair shop in Orange Park, FL
brake shop in Jacksonville, FL
alignment shop in Middleburg, FL
```

Single-service specialists are the most under-listed shops in automotive: too niche for directory sites, too small for aggregators. Many run no website at all, so leave `onlyWithWebsite` off — the row still arrives with name, address, phone, rating and review count, which is everything a phone-based outreach needs, and the per-row price is the same either way.

For phone work, note that `websitePhones` holds up to four additional numbers found on the shop's own site with the Google Maps number filtered out, so no slot is wasted on a duplicate of a number you already have.

# Actor input Schema

## `location` (type: `string`):

City, region or country to search in, e.g. 'Columbus, OH', 'Austin, TX', 'London, UK'.

## `keywords` (type: `array`):

Which repair shop types to search for. Pick one or several; leave empty to sweep all six at once. Need a specialty not listed (e.g. 'brake shop', 'mobile mechanic')? Use Custom search queries below.

## `searchQueries` (type: `array`):

Full searches, one per line (e.g. 'transmission repair shop in Cleveland, OH'). When set, these override Location + shop types, and any wording is allowed here — use it for segments outside the list above or to cover several cities in one run.

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

Maximum number of companies to find per search. One search typically yields up to ~120 companies.

## `maxPagesPerSite` (type: `integer`):

How many pages to check on each company website when hunting for emails (homepage, /contact, /about...). More pages = more emails found, slightly slower run.

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

Drop companies that have no website (they can never have an email). You are not charged for dropped companies.

## `includeGenericEmails` (type: `boolean`):

Keep every published address, including shared inboxes like info@, hello@ and contact@. Disable to drop only non-deliverable system addresses (noreply@, no-reply@, donotreply@, mailer-daemon@, postmaster@, webmaster@, hostmaster@, abuse@).

## `language` (type: `string`):

Language code for the discovery search (e.g. 'en', 'es', 'fr', 'de').

## Actor input object example

```json
{
  "location": "Columbus, OH",
  "keywords": [
    "auto repair shop"
  ],
  "maxResults": 5,
  "maxPagesPerSite": 1,
  "onlyWithWebsite": false,
  "includeGenericEmails": true,
  "language": "en"
}
```

# Actor output Schema

## `leads` (type: `string`):

Complete B2B leads (company, website, phone, address, emails, social profiles), one item per lead in the default dataset.

# 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 = {
    "location": "Columbus, OH",
    "keywords": [
        "auto repair shop"
    ],
    "maxResults": 5,
    "maxPagesPerSite": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("renzomacar/auto-repair-leads-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 = {
    "location": "Columbus, OH",
    "keywords": ["auto repair shop"],
    "maxResults": 5,
    "maxPagesPerSite": 1,
}

# Run the Actor and wait for it to finish
run = client.actor("renzomacar/auto-repair-leads-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 '{
  "location": "Columbus, OH",
  "keywords": [
    "auto repair shop"
  ],
  "maxResults": 5,
  "maxPagesPerSite": 1
}' |
apify call renzomacar/auto-repair-leads-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,renzomacar/auto-repair-leads-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/rRCZZ7cWuWttUqEE5/builds/MnCTLD0vTMq3KAYo0/openapi.json
