# TTB Alcohol Permittee Directory Scraper (`jungle_synthesizer/ttb-alcohol-permittee-directory-scraper`) Actor

Download 83,000+ federal alcohol permit records from the TTB FOIA public directory. Covers distilleries (DSP), wineries, alcohol importers, and wholesalers. Filter by permit type and state. Data includes permit number, business name, DBA, address, county, and industry type.

- **URL**: https://apify.com/jungle\_synthesizer/ttb-alcohol-permittee-directory-scraper.md
- **Developed by:** [BowTiedRaccoon](https://apify.com/jungle_synthesizer) (community)
- **Categories:** Lead generation, Business, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## TTB Alcohol Permittee Directory Scraper

Download permit records for 83,000+ federally licensed alcohol businesses from the [TTB FOIA permittee directory](https://www.ttb.gov/public-information/foia/list-of-permittees). Returns structured data on distilleries, wineries, alcohol importers, and wholesalers — permit number, legal name, DBA, address, county, and industry type.

### TTB Alcohol Permittee Directory Scraper Features

- **Downloads all 83,000+ records** from the TTB's FOIA-mandated public permittee list in one run
- **Filters by permit type** — Distilled Spirits Plant, Wine Producer, Importer (Alcohol), or Wholesaler (Alcohol)
- **Filters by state** — narrow to any US state abbreviation (CA, TX, NY, etc.) for regional targeting
- **Flags new permits** — optional filter for permits issued within the last 7 days, useful for market monitoring
- **No proxies, no browser** — the TTB publishes this as a plain JSON download, no anti-bot measures involved
- **Weekly freshness** — TTB updates the source file weekly, so data is current to within a few days

### Who Uses TTB Permit Data?

- **Distribution software vendors** — build lead lists of wineries and distilleries actively looking for logistics solutions
- **Packaging suppliers** — target new DSP permits (new distilleries are new customers for bottles, labels, and barrels)
- **Compliance software companies** — identify which states have the highest permittee density for sales territory planning
- **Ingredient and raw material suppliers** — find craft producers by type and region, then route to the right sales rep
- **Market researchers** — track growth in craft spirits vs. wine vs. importer segments over time

### How TTB Alcohol Permittee Directory Scraper Works

1. **Fetches the TTB listing page** to discover the current data file URL — TTB updates files weekly at the same path
2. **Downloads the complete JSON** (~17 MB) containing all active permittee records in one request
3. **Applies your filters** — permit type, state, new-permit flag — and emits matching records up to `maxItems`
4. **Returns structured JSON** with one record per permit holder

The whole run, including the ~10s download, typically completes in under a minute for filtered queries.

### TTB Alcohol Permittee Directory Scraper Input

```json
{
  "permitTypes": ["Distilled Spirits Plant", "Wine Producer"],
  "stateFilter": "CA",
  "includeNewOnly": false,
  "maxItems": 1000
}
````

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `permitTypes` | array | all types | Filter by permit category. Valid values: `Distilled Spirits Plant`, `Wine Producer`, `Importer (Alcohol)`, `Wholesaler (Alcohol)`. Leave empty for all. |
| `stateFilter` | string | (all states) | 2-letter state abbreviation (e.g. `CA`, `TX`). Leave empty to return all states. |
| `includeNewOnly` | boolean | `false` | When true, returns only permits issued in the last 7 days. |
| `maxItems` | integer | `10` | Maximum records to return. Set to `0` for all matching records. |
| `proxyConfiguration` | object | no proxy | Proxy settings. Not required — TTB is a federal government endpoint. |

### TTB Alcohol Permittee Directory Scraper Output Fields

```json
{
  "permit_number": "CA-S-12345",
  "owner_name": "NAPA VALLEY DISTILLERY LLC",
  "operating_name": "Napa Valley Spirits",
  "industry_type": "Distilled Spirits Plant",
  "street": "100 MAIN ST",
  "city": "NAPA",
  "state": "CA",
  "zip": "94559",
  "county": "NAPA",
  "is_new_permit": false,
  "source_url": "https://www.ttb.gov/public-information/foia/list-of-permittees"
}
```

| Field | Type | Description |
|-------|------|-------------|
| `permit_number` | string | TTB permit number (e.g. `AK-S-15000`) — unique identifier |
| `owner_name` | string | Legal business name of the permit holder |
| `operating_name` | string | DBA / operating name (empty when the DBA matches the legal name) |
| `industry_type` | string | Permit category: `Distilled Spirits Plant`, `Wine Producer`, `Importer (Alcohol)`, or `Wholesaler (Alcohol)` |
| `street` | string | Premise street address |
| `city` | string | Premise city |
| `state` | string | Premise state abbreviation |
| `zip` | string | Premise ZIP code |
| `county` | string | Premise county — self-reported by the permittee, not always verified |
| `is_new_permit` | boolean | True if the permit was issued within the last 7 days |
| `source_url` | string | URL of the TTB FOIA permittee list page |

### What's in the Data

The TTB FOIA list covers four permit categories:

| Permit Type | Approximate Count | Who |
|-------------|-------------------|-----|
| Wholesaler (Alcohol) | ~38,500 | Distributors, regional wholesalers |
| Importer (Alcohol) | ~21,200 | Importers of foreign spirits, wine, beer |
| Wine Producer | ~18,000 | Wineries, blenders, wine producers |
| Distilled Spirits Plant | ~5,600 | Distilleries, bottlers |

Brewery data is not included. Federal law (IRC Section 6103) prohibits the TTB from publishing brewery tax records.

### 🔍 FAQ

#### How do I get distillery leads from TTB data?

TTB Alcohol Permittee Directory Scraper returns all ~5,600 Distilled Spirits Plant records. Set `permitTypes` to `["Distilled Spirits Plant"]` and optionally add a `stateFilter` if you're targeting a region. The output includes legal name, DBA, and full address — enough to route to a CRM or build a prospecting list.

#### How current is the data?

TTB updates the source file weekly. The scraper fetches the current file each run, so results are accurate to within a few days of the last TTB refresh. The source page shows the data date.

#### Does TTB Alcohol Permittee Directory Scraper need proxies?

It does not. The TTB publishes this data as a direct public download under FOIA obligations. No authentication, no rate limiting, no anti-bot measures.

#### Can I get all 83,000 records in one run?

Yes. Set `maxItems` to `0` (unlimited) or a large number, leave `permitTypes` and `stateFilter` empty. The full download is about 17 MB and processes in under a minute. Memory usage is well within the 512 MB default.

#### Does this include brewery data?

No. The TTB does not publish brewer permit records — IRC Section 6103 protects those as taxpayer records. This actor covers the four publicly released categories: DSPs, wine producers, importers, and wholesalers.

***

### Need More Features?

Need a custom state list, SIC code mapping, or bulk enrichment with additional data sources? [File a feature request](https://console.apify.com/actors/issues) or get in touch.

### Why Use TTB Alcohol Permittee Directory Scraper?

- **Complete federal coverage** — all 83,000+ active TTB permits across four categories in one download, updated weekly
- **Affordable** — at $0.001/record, pulling the full DSP list (~5,600 records) costs under a dollar
- **Clean, structured output** — flat JSON with consistent field names, ready for CRM import or downstream analysis

# Actor input Schema

## `sp_intended_usage` (type: `string`):

Please describe how you plan to use the data extracted by this crawler.

## `sp_improvement_suggestions` (type: `string`):

Provide any feedback or suggestions for improvements.

## `sp_contact` (type: `string`):

Provide your email address so we can get in touch with you.

## `permitTypes` (type: `array`):

Filter by permit type. Leave empty to include all types.

## `stateFilter` (type: `string`):

Filter by US state abbreviation (e.g. CA, TX, NY). Leave empty for all states.

## `includeNewOnly` (type: `boolean`):

When enabled, return only permits issued in the last 7 days (New\_Permit\_Flag = 1).

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

Maximum number of permit records to return. Set to 0 for all records.

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

TTB is a federal government service and does not require proxies.

## Actor input object example

```json
{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "permitTypes": [
    "Distilled Spirits Plant",
    "Wine Producer",
    "Importer (Alcohol)",
    "Wholesaler (Alcohol)"
  ],
  "includeNewOnly": false,
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

No description

# 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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "permitTypes": [
        "Distilled Spirits Plant",
        "Wine Producer",
        "Importer (Alcohol)",
        "Wholesaler (Alcohol)"
    ],
    "stateFilter": "",
    "includeNewOnly": false,
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("jungle_synthesizer/ttb-alcohol-permittee-directory-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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "permitTypes": [
        "Distilled Spirits Plant",
        "Wine Producer",
        "Importer (Alcohol)",
        "Wholesaler (Alcohol)",
    ],
    "stateFilter": "",
    "includeNewOnly": False,
    "maxItems": 10,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("jungle_synthesizer/ttb-alcohol-permittee-directory-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "permitTypes": [
    "Distilled Spirits Plant",
    "Wine Producer",
    "Importer (Alcohol)",
    "Wholesaler (Alcohol)"
  ],
  "stateFilter": "",
  "includeNewOnly": false,
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call jungle_synthesizer/ttb-alcohol-permittee-directory-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=jungle_synthesizer/ttb-alcohol-permittee-directory-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "TTB Alcohol Permittee Directory Scraper",
        "description": "Download 83,000+ federal alcohol permit records from the TTB FOIA public directory. Covers distilleries (DSP), wineries, alcohol importers, and wholesalers. Filter by permit type and state. Data includes permit number, business name, DBA, address, county, and industry type.",
        "version": "1.0",
        "x-build-id": "2IfbWcICQ6vVlU8X2"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/jungle_synthesizer~ttb-alcohol-permittee-directory-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-jungle_synthesizer-ttb-alcohol-permittee-directory-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/jungle_synthesizer~ttb-alcohol-permittee-directory-scraper/runs": {
            "post": {
                "operationId": "runs-sync-jungle_synthesizer-ttb-alcohol-permittee-directory-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/jungle_synthesizer~ttb-alcohol-permittee-directory-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-jungle_synthesizer-ttb-alcohol-permittee-directory-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "sp_intended_usage": {
                        "title": "What is the intended usage of this data?",
                        "minLength": 1,
                        "type": "string",
                        "description": "Please describe how you plan to use the data extracted by this crawler."
                    },
                    "sp_improvement_suggestions": {
                        "title": "How can we improve this crawler for you?",
                        "minLength": 1,
                        "type": "string",
                        "description": "Provide any feedback or suggestions for improvements."
                    },
                    "sp_contact": {
                        "title": "Contact Email",
                        "minLength": 1,
                        "type": "string",
                        "description": "Provide your email address so we can get in touch with you."
                    },
                    "permitTypes": {
                        "title": "Permit Types",
                        "type": "array",
                        "description": "Filter by permit type. Leave empty to include all types.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "stateFilter": {
                        "title": "State Filter",
                        "type": "string",
                        "description": "Filter by US state abbreviation (e.g. CA, TX, NY). Leave empty for all states."
                    },
                    "includeNewOnly": {
                        "title": "New Permits Only",
                        "type": "boolean",
                        "description": "When enabled, return only permits issued in the last 7 days (New_Permit_Flag = 1).",
                        "default": false
                    },
                    "maxItems": {
                        "title": "Max Items",
                        "type": "integer",
                        "description": "Maximum number of permit records to return. Set to 0 for all records.",
                        "default": 10
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "TTB is a federal government service and does not require proxies."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
