# Indiana Auto Dealer License Lookup & Leads Scraper (SOS) (`scrapebench/indiana-auto-dealer-license-lookup`) Actor

Indiana motor-vehicle dealer licences from the Secretary of State: new and used car dealers, salvage recyclers, transport operators, watercraft and manufactured-home dealers. Licence number, status, expiry, address, phone, insurance and bond carrier.

- **URL**: https://apify.com/scrapebench/indiana-auto-dealer-license-lookup.md
- **Developed by:** [ScrapeBench](https://apify.com/scrapebench) (community)
- **Categories:** Lead generation
- **Security:** Limited permissions
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.004 / license match

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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Indiana Auto Dealer License Lookup & Leads Scraper (SOS)

### Pain points

- The Secretary of State's dealer search refuses a search with no filter, opens behind a browser check, and shows 10 dealers a page: 2,442 pages for the whole list (checked 2026-11-07).
- Its CSV export starts every field with a tab and leaves quotes inside addresses unescaped ("1711 "I" AVE"), so a spreadsheet splits those rows; the address is one field (street, city, ZIP) with no state.
- One dealer number can hold several licence types (used, wholesale, watercraft), and some licences are listed twice, so a count of rows is not a count of licences.

### What we solve

- Every licence in the Secretary of State's dealer list: 24,415 licences on November 7, 2026 (5,185 VALID), filterable by licence type, status, city and expiry date.
- One clean table: licence number exactly as the Secretary of State prints it, dealer name, licence type, status and status date, expiry date (YYYY-MM-DD), street, city and ZIP split out, business phone, insurance carrier and policy number, bond carrier and bond number.
- Looks up dealer names or licence numbers across every licence type; a number matches exactly, a name matches if it is contained in the dealer name.

### Summary

Indiana Secretary of State dealer licences in one dataset: every licence in the state's public dealer search, 15 licence types from Dealer Used, Dealer New and Wholesale to Automotive Salvage Recycler, Transport Operator, Transfer, Manufacturer, Distributor, Automobile Auction, Watercraft (new and used), Converter Manufacturer and Manufactured Home sales lots and communities. Each row has the licence number, dealer name, licence type, status (Valid, Expired, Probation, Suspended, Revoked, Out of Business), status date, expiry date, street, city, ZIP, business phone, insurance carrier and policy number, and bond carrier and bond number. On November 7, 2026 the list held 24,415 licences, 5,185 of them VALID; every VALID licence carries a phone and a street address. No e-mail is published. Exports and lookups read a stored copy of the list. Pay only per licence returned.

### Who it's for

- Auto-finance lenders, floor-plan providers and warranty companies reaching Indiana's licensed dealers
- Dealer-software, inventory, DMS and marketing vendors building a territory list
- Insurers and surety brokers who sell dealer garage policies and dealer bonds
- Compliance and KYB teams checking that a dealer's licence is valid before a deal

### How to use

This actor does two jobs. Run it, then collect results from the run's dataset (export to JSON/CSV/Excel, or pull via the Apify API).

**Get a list (export):** no names, just filters; returns the whole matching list.

```json
{
  "categories": [
    "DEALER USED",
    "DEALER NEW"
  ],
  "statuses": [
    "VALID"
  ],
  "maxResults": 500
}
```

**Check specific firms (lookup):** put company names or licence numbers in `mode`, `queries`; **Inputs** below says how each is matched.

```json
{
  "mode": "lookup",
  "queries": [
    "AUTO SALES",
    "1200183"
  ],
  "maxResults": 20
}
```

See **Inputs** below for every available field.

### What you get

One row per record:

| Field | Description |
|---|---|
| `license_number` | Dealer licence number exactly as the Secretary of State prints it (e.g. 1200183, T30008877); listing_id holds the same |
| `business_name` | Dealer name as licensed; name holds the same |
| `license_type` | Licence type in the Secretary of State's words, e.g. DEALER USED, AUTOMOTIVE SALVAGE RECYCLER, TRANSPORT OPERATOR |
| `status` | VALID, EXPIRED, PROBATION, SUSPENDED, REVOKED, OUT OF BUSINESS - VOLUNTARY or OUT OF BUSINESS - ADMIN |
| `expiration_date` | Expiry date (YYYY-MM-DD) |
| `address` | Street address of the dealership |
| `city` | City |
| `zip_code` | ZIP code (ZIP+4 where printed) |
| `address_state` | IN for an Indiana ZIP; empty for out-of-state dealers (the list prints no state) |
| `phone` | Business phone as printed; phone_e164 holds it as +1XXXXXXXXXX |
| `insurance_company` | Insurance carrier on file |
| `bond_company` | Surety bond carrier on file |
| `extras.insurance_policy_number` | Insurance policy number on file |
| `extras.bond_number` | Bond number on file |
| `extras.status_date` | Date the current status was set (YYYY-MM-DD) |
| `extras.mobility_endorsement` | true where the licence carries the Secretary of State's Mobility endorsement (20 VALID licences on 2026-11-07) |
| `source_url` | The Secretary of State's public dealer search, with the licence number and type after the # |

Sample:

```json
{
  "license_number": "1200183",
  "business_name": "NEAL SCRAP METALS LLC",
  "license_type": "AUTOMOTIVE SALVAGE RECYCLER",
  "status": "VALID",
  "expiration_date": "2027-08-01",
  "address": "1711 \"I\" AVE",
  "city": "NEW CASTLE",
  "zip_code": "47362",
  "address_state": "IN",
  "phone": "7655294184",
  "insurance_company": "BENCHMARK INS CO",
  "bond_company": "THE OHIO CASUALTY INSURANCE COMPANY",
  "state": "IN",
  "source_url": "https://dealers.sos.in.gov/PublicDealerSearch/PublicSearch#1200183-AUTOMOTIVE-SALVAGE-RECYCLER",
  "extras": {
    "status_date": "2026-08-03",
    "insurance_policy_number": "CP 7002462",
    "bond_number": "999492801",
    "mobility_endorsement": false
  }
}
```

### Inputs

| Field | Required | Type | Default | Description |
|---|---|---|---|---|
| `mode` | no | string | `"auto"` | export: no names, just filters; returns the whole matching list. lookup / verify: put dealer names (matched if contained in the dealer name) or licence numbers (exact) in 'queries'. auto picks the mode for you. |
| `query` | no | string | — | A dealer's name (or listing number) to look up in the stored copy of the directory. Kept alongside 'queries' for saved tasks. |
| `queries` | no | array | `[]` | A dealer's name (or listing number) to look up in the stored copy of the directory. Several values in one run; combined with 'query'. |
| `status` | no | string | — | Only listings in this status. Kept alongside 'statuses' for saved tasks. |
| `statuses` | no | array | `[]` | Only listings in this status. Several values in one run; combined with 'status'. |
| `city` | no | string | — | Only listings in this city. Kept alongside 'cities' for saved tasks. |
| `cities` | no | array | `[]` | Only listings in this city. Several values in one run; combined with 'city'. |
| `categories` | no | array | `[]` | Only rows from this licence type (one or more). Available: AUTOMOBILE AUCTION, AUTOMOTIVE SALVAGE RECYCLER, CONVERTER MANUFACTURER, DEALER NEW, DEALER USED, DISTRIBUTOR, MANUFACTURED HOME COMMUNITY, MANUFACTURED HOME SALES LOT, MANUFACTURER, NOT APPLICABLE, TRANSFER, TRANSPORT OPERATOR, WATERCRAFT - NEW, WATERCRAFT - USED, WHOLESALE. |
| `licenseTypes` | no | array | `[]` | Same filter as 'Licence type', under the name every state licence actor takes; the two lists are combined. |
| `expiresAfter` | no | string | — | Only licences expiring on or after this date (YYYY-MM-DD). Licences with no published expiry are left out when set. |
| `expiresBefore` | no | string | — | Only licences expiring on or before this date (YYYY-MM-DD): renewals coming due. |
| `maxResults` | no | integer | `500` | Per query in lookup mode; per run in export mode. |
| `proxyConfiguration` | no | object | `{"useApifyProxy": false}` | Used only for live lookups; exports read the stored snapshot. |

### Pricing (Pay Per Event)

You pay per result (`dataset-item`) — **no charge for empty runs**. Example: **1000 license matches** at *$0.004/result* ≈ **$4.00**.

Notices (unknown licence type, no match, source unavailable) are free. Apify platform usage is billed separately per your plan.

### Use cases

- Dealer outreach: every VALID used and new car dealer in Indiana, with phone and street address (3,509 licences on 2026-11-07).
- Renewal and bond campaigns: licences expiring before a date (on 2026-11-07, 735 VALID licences expired in February 2027).
- Market sizing: count dealers by type and city (Indianapolis 599 VALID, Fort Wayne 259, Elkhart 223).
- Licence checks: confirm a dealer number's name, licence type, status and expiry.

### Why this actor

- The whole Indiana dealer list in one dataset, every licence type and status.
- Filters by licence type, status, city and expiry date, each taking a list (the state's search has no expiry filter).
- Address split into street, city and ZIP; phone also as +1 E.164; one row per licence.
- Pay per licence; notices are free.

### Limitations & updates

Covers the licences in the Indiana Secretary of State's public dealer search, every status. No e-mail and no original issue date. The list prints no state in the address, so address_state is IN only for an Indiana ZIP (83 VALID dealers are out of state). A licence the list repeats is returned once, and the one row with no dealer number is left out. Runs read a stored copy (its date is in the run log). One run returns at most 100,000 rows.

### FAQ

**Where does the data come from?**

The Indiana Secretary of State's public dealer search (dealers.sos.in.gov, Public Dealer Search): its list of every dealer licence, all statuses. Exports and lookups read a stored copy of that list; the run log gives its date.

**Which dealers are included?**

Every licence type in the list: Dealer Used, Dealer New, Wholesale, Automotive Salvage Recycler, Transport Operator, Transfer, Manufacturer, Converter Manufacturer, Distributor, Automobile Auction, Watercraft - New, Watercraft - Used, Manufactured Home Sales Lot and Manufactured Home Community, plus one licence typed Not Applicable.

**Is there a phone or email?**

A business phone, yes: 5,185 of 5,185 VALID licences and 24,403 of 24,415 in all (checked 2026-11-07). The Secretary of State publishes no e-mail.

**Are closed or revoked dealers included?**

Yes. The list keeps every status: on 2026-11-07, 15,461 OUT OF BUSINESS - VOLUNTARY, 2,564 OUT OF BUSINESS - ADMIN, 937 REVOKED, 196 SUSPENDED, 70 EXPIRED and 2 PROBATION next to 5,185 VALID. Put VALID in Statuses for current dealers only.

**How do I look up a dealer or a licence number?**

Put names or licence numbers in queries and set mode to lookup. A number matches exactly (1200183); a name matches if it is contained in the dealer name.

**How current is it?**

Runs read a stored copy of the list, refreshed when it is over 30 days old and the actor is in use; the run log states its date, and a copy older than 45 days adds a free notice saying so.

**How am I charged?**

One event per licence returned. Notices are free.

### Guides & use cases

Written up on **[scrapebench.dev](https://scrapebench.dev)** — the bench that runs and verifies this actor against the live source every night:

- **How-to:** [How to run Indiana Auto Dealer License Lookup & Leads Scraper](https://scrapebench.dev/guides/how-to-indiana-auto-dealer-license-lookup/)
- **Use case:** [Build an Indiana Dealer Renewal List for Bond and Garage-Policy Outreach](https://scrapebench.dev/use-cases/indiana-dealer-license-renewal-list/)

More actors, coverage and nightly verification results: **[scrapebench.dev](https://scrapebench.dev)**

### Works with AI assistants (MCP)

Callable as an MCP tool, so Claude, Cursor, VS Code Copilot and other MCP clients can run it directly. Grab the config from the [MCP tab](https://apify.com/scrapebench/indiana-auto-dealer-license-lookup/api/mcp) on this page — Apify hosts the server and keeps that snippet current, and OAuth signs you in on first connect, so no API token goes in your config file.

Then just ask:

> "List VALID used car dealers licensed by the Indiana Secretary of State in Indianapolis, with phone numbers."

That is Licence type DEALER USED, Status VALID and City INDIANAPOLIS (363 licences in the 2026-11-07 list). Keep maxResults small on a first call. Runs started this way bill exactly like any other run.

### Data & lawful use

This actor collects publicly available information that the Indiana Secretary of State (SOS) Dealer Services publishes for public
lookup — licence records, business listings and the contact details professionals list there.
Some of it identifies individuals (sole proprietors, licence holders, agents), so treat any
names, phone numbers and emails in your results as personal data.

When you run this actor, you decide what is collected and what it is used for, so you are the
controller of that data and we act only as your processor (Apify Standard Actor Contract).
You need a lawful basis for your use, must honour opt-out and deletion requests, and must
follow the marketing rules that apply to you (CAN-SPAM, TCPA, GDPR, CCPA and similar).
Don't use the output for unsolicited bulk messaging, for screening covered by the FCRA, or
for anything the source's own terms forbid.

Your results are stored in your own Apify account. We don't keep a copy of your results and
don't sell or share them.

### Disclaimer

This is an independent tool. It is not affiliated with, endorsed by or sponsored by
the Indiana Secretary of State (SOS) Dealer Services. Names and marks are used only to describe the data source. Records are
provided as published by the source and may be out of date or incomplete. For anything
consequential (hiring, a permit, a legal decision), confirm the record with the issuing
agency. You are responsible for making sure your use complies with applicable law and the
source's terms.

### Need help?

Open an issue on this actor's **Issues** tab and we'll respond there. Bug reports, missing
fields and feature requests are all welcome. Guides and examples: [scrapebench.dev](https://scrapebench.dev).

If you are a person named in this data and want your record removed from our copy, email
apify-help@scrapebench.dev; the source agency remains the official record.

Your run may be used to improve our services. If something looks off, or you want this actor to fit your use better, please share your run data with us: [Apify Console → Settings → Security → Share run data with developers](https://console.apify.com/settings/security). It lets us see exactly what went wrong and keep improving the actor.

# Actor input Schema

## `mode` (type: `string`):

export: no names, just filters; returns the whole matching list. lookup / verify: put dealer names (matched if contained in the dealer name) or licence numbers (exact) in 'queries'. auto picks the mode for you.

## `query` (type: `string`):

A dealer's name (or listing number) to look up in the stored copy of the directory. Kept alongside 'queries' for saved tasks.

## `queries` (type: `array`):

A dealer's name (or listing number) to look up in the stored copy of the directory. Several values in one run; combined with 'query'.

## `status` (type: `string`):

Only listings in this status. Kept alongside 'statuses' for saved tasks.

## `statuses` (type: `array`):

Only listings in this status. Several values in one run; combined with 'status'.

## `city` (type: `string`):

Only listings in this city. Kept alongside 'cities' for saved tasks.

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

Only listings in this city. Several values in one run; combined with 'city'.

## `categories` (type: `array`):

Only rows from this licence type (one or more). Available: AUTOMOBILE AUCTION, AUTOMOTIVE SALVAGE RECYCLER, CONVERTER MANUFACTURER, DEALER NEW, DEALER USED, DISTRIBUTOR, MANUFACTURED HOME COMMUNITY, MANUFACTURED HOME SALES LOT, MANUFACTURER, NOT APPLICABLE, TRANSFER, TRANSPORT OPERATOR, WATERCRAFT - NEW, WATERCRAFT - USED, WHOLESALE.

## `licenseTypes` (type: `array`):

Same filter as 'Licence type', under the name every state licence actor takes; the two lists are combined.

## `expiresAfter` (type: `string`):

Only licences expiring on or after this date (YYYY-MM-DD). Licences with no published expiry are left out when set.

## `expiresBefore` (type: `string`):

Only licences expiring on or before this date (YYYY-MM-DD): renewals coming due.

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

Per query in lookup mode; per run in export mode.

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

Used only for live lookups; exports read the stored snapshot.

## Actor input object example

```json
{
  "mode": "auto",
  "queries": [],
  "statuses": [],
  "cities": [],
  "categories": [],
  "licenseTypes": [],
  "maxResults": 500,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

One row per business listing; notices are free.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapebench/indiana-auto-dealer-license-lookup").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("scrapebench/indiana-auto-dealer-license-lookup").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 '{}' |
apify call scrapebench/indiana-auto-dealer-license-lookup --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapebench/indiana-auto-dealer-license-lookup"
        }
    }
}
```

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/0ww9Kt7ZwAKdNujaC/builds/45ejOlchRKu7Jo3ay/openapi.json
