# Texas New Business Leads: Sales Tax & Franchise Tax Filings (`great_stuff/texas-new-business-leads`) Actor

Fresh Texas business leads from official Comptroller open data: new sales tax permit holders and franchise tax registrations with name, address, county, NAICS and start date. Filter by county, city, ZIP.

- **URL**: https://apify.com/great_stuff/texas-new-business-leads.md
- **Developed by:** [Kamal Katul](https://apify.com/great_stuff) (community)
- **Categories:** Lead generation, Business
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 business records

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

## Texas New Business Leads: New LLCs, Corporations and Sales Tax Permits

Get a fresh list of **businesses that just started operating in Texas**, straight from the **Texas Comptroller of Public Accounts** open data: new **sales tax permits** (a business opening a location that sells taxable goods or services) and new **franchise taxpayers** (newly formed or newly registered LLCs, corporations and partnerships).

Each record comes in one clean format: business name, entity type, NAICS industry code, location address, county, start date, Secretary of State file number and status. Filter by county, city, ZIP, industry, entity type or name keywords.

### Use cases

- **B2B service providers** (bookkeeping, payroll, insurance, merchant services, banking, POS, marketing, web design): reach businesses in their first weeks, when they choose vendors.
- **Commercial suppliers and distributors**: find new restaurants (NAICS `722`), salons (`8121`), contractors (`23`) or retailers (`44`/`45`) in your territory.
- **Commercial real estate, signage and equipment leasing**: see which new locations are opening and where.
- **Economic developers, journalists and analysts**: count new business formation by county or industry.

### Sources

| Key | Dataset | What a record means | Date used |
|---|---|---|---|
| `salesTax` | [Active Sales Tax Permit Holders](https://data.texas.gov/d/jrea-zgmq) | A business location ("outlet") that received a Texas sales tax permit. Has the location address, mailing address and **NAICS code**. | Permit issue date |
| `franchise` | [Active Franchise Taxpayers](https://data.texas.gov/d/9cir-efmm) | An entity that became responsible for Texas franchise tax, usually a new LLC or corporation. Has the **SOS file number, charter date and status**. | Responsibility beginning date |

Both datasets are published by the Texas Comptroller on the official Texas Open Data Portal (data.texas.gov, Socrata SODA API). No login, no browser, no proxies.

**Sole proprietors and other individual-owner permit types are always excluded**, so the output lists business entities only.

### How to use

1. Choose **Sources**: `salesTax`, `franchise` or both. With both, results are split fairly between them.
2. Set **Days back** (default 7) or an exact **Date from / Date to**.
3. Narrow it down (all optional): **Counties** (`Travis`, `Harris`, or 3-digit Comptroller codes such as `227`), **Cities**, **ZIP prefixes** (`787`), **NAICS prefixes** (`722`), **Entity categories** (`llc`, `corporation`, `partnership`, `professional`, `nonprofit`, `trust`, `government`, `financial`, `other`), **Name keywords**.
4. Set **Max results** and run. Export to CSV/Excel/JSON or connect via API, Zapier or Make. Schedule it weekly for a steady lead feed.

### Input

| Field | Type | Description |
|---|---|---|
| `sources` | array | `salesTax`, `franchise`. Default `["salesTax"]`. |
| `daysBack` | integer | Look back N days (default 7). Ignored when `dateFrom` is set. |
| `dateFrom` / `dateTo` | string | Exact window, `YYYY-MM-DD`. |
| `counties` | array | County names or Comptroller codes `001`-`254`. Unknown names fail the run with a clear message. |
| `cities` | array | Exact city names, case-insensitive. |
| `zipPrefixes` | array | e.g. `78701` or `787`. |
| `naicsPrefixes` | array | NAICS code prefixes (sales tax records only have NAICS). |
| `entityCategories` | array | See list above. Empty = all business entities. |
| `keywords` | array | Keep businesses whose name contains any of these words. |
| `texasAddressOnly` | boolean | Drop out-of-state companies from the franchise source. |
| `maxResults` | integer | Total cap, newest first (default 100). |
| `socrataAppToken` | string | Optional free data.texas.gov app token, only for very large pulls. |

Example: new restaurants in Houston's county this month.

```json
{
  "sources": ["salesTax"],
  "dateFrom": "2026-10-01",
  "counties": ["Harris"],
  "naicsPrefixes": ["722"],
  "entityCategories": ["llc", "corporation"],
  "maxResults": 200
}
```

### Output

Real records from a test run on 2026-10-28:

```json
{
  "source": "salesTax",
  "businessName": "EXAMPLE CRAWFISH LLC",
  "taxpayerNumber": "32000000000",
  "entityType": "Texas limited liability company",
  "entityCategory": "llc",
  "naicsCode": "722330",
  "naicsSector": "Accommodation and Food Services",
  "address": "100 EXAMPLE ST",
  "city": "HOUSTON",
  "state": "TX",
  "zip": "77002",
  "county": "Harris",
  "date": "2026-10-24",
  "permitIssueDate": "2026-10-24",
  "firstSalesDate": "2027-01-15",
  "insideCityLimits": true,
  "sourceUrl": "https://data.texas.gov/d/jrea-zgmq"
}
```

```json
{
  "source": "franchise",
  "businessName": "EXAMPLE ROOFING LLC",
  "entityType": "Texas limited liability company",
  "address": "200 EXAMPLE AVE",
  "city": "DALLAS",
  "zip": "75201",
  "county": "Dallas",
  "date": "2026-10-06",
  "sosFileNumber": "6000000000",
  "sosCharterDate": "2026-10-06",
  "sosStatus": "Active",
  "rightToTransactBusiness": "Active",
  "sourceUrl": "https://data.texas.gov/d/9cir-efmm"
}
```

All 31 fields are always present (`null` when the source does not have them). A `RUN_SUMMARY` record in the key-value store shows how many rows were read, filtered and saved per source.

### Pricing

Pay per result: **$0.003 per business** saved ($3 per 1,000). No start fee. Records removed by your filters are free. Set a maximum spend per run in the Apify console and the Actor stops cleanly at that limit.

### Limits and tips

- The Comptroller refreshes these datasets about weekly, so the newest sales tax permits are usually a few days old. Use 7 days or more.
- `franchise` records have no NAICS code, so a NAICS filter removes all of them. Use name keywords instead.
- A franchise "responsibility date" can be in the future for newly registered entities; the Actor only returns dates up to `dateTo` (today by default).
- Businesses that only owe franchise tax (no taxable sales) never appear in `salesTax`, and many small sellers never appear in `franchise`. Run both for the widest coverage.
- Coverage: records whose taxpayer address is in a small number of non-US locations are skipped (never charged), and a `cities` value naming one is rejected with a clear message.

### FAQ

**What is the difference between the two sources?**
`salesTax` lists new Texas sales-tax permits (shops, restaurants and service businesses opening an outlet). `franchise` lists new franchise-tax accounts (newly registered LLCs and corporations).

**How fresh is the data?**
The Texas Comptroller updates both datasets on data.texas.gov about once a week, so set `daysBack` to 7 or more.

**Can I filter by area or industry?**
Yes: by county, city, ZIP prefix, NAICS prefix (sales tax), entity category and keywords.

**Will I pay for duplicates?**
No. Each taxpayer and outlet is saved once per run, and records removed by your filters are free.

### Privacy and legal

The data are public records published by the Texas Comptroller for reuse on data.texas.gov (the sales tax dataset is marked **Public Domain**; the franchise dataset carries no license restriction and is published as public information). Sole proprietors are excluded, so records describe business entities, not private individuals. Some small entities list a home address as their business address; treat it as a business contact. Follow anti-spam and telemarketing laws (CAN-SPAM, TCPA, Texas Business & Commerce Code ch. 304) when contacting businesses.

Not affiliated with the Texas Comptroller, the State of Texas or Tyler Technologies.

# Actor input Schema

## `sources` (type: `array`):

salesTax = businesses issued a new Texas sales tax permit (one record per business location, updated daily, the freshest signal). franchise = companies newly added to the franchise tax rolls (LLCs, corporations and partnerships registered in or doing business in Texas; includes out-of-state companies).

## `daysBack` (type: `integer`):

Look back this many days from today (or from 'Date to'). Ignored when 'Date from' is set. The Comptroller publishes with a lag of a few days.

## `dateFrom` (type: `string`):

Optional start date: permit issue date (sales tax) or franchise tax responsibility date.

## `dateTo` (type: `string`):

Optional end date. Defaults to today.

## `counties` (type: `array`):

County names, e.g. "Travis", "Harris", "Dallas", "Bexar". Sales tax: the location's county. Franchise: the company's address county (out-of-state companies have none). Leave empty for all of Texas.

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

Exact city names, e.g. "AUSTIN", "ROUND ROCK". Case-insensitive.

## `zipPrefixes` (type: `array`):

e.g. "78701" or "787" for a whole area.

## `naicsPrefixes` (type: `array`):

Keep businesses whose NAICS code starts with any of these, e.g. "722" restaurants, "23" construction, "5412" accounting, "4441" building materials. Records without a NAICS code are dropped when this is set (most franchise records have none).

## `entityCategories` (type: `array`):

Leave empty for all. Sole proprietors and other individual-owner types are always excluded.

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

Keep businesses whose name contains any of these words, e.g. "roofing", "dental", "taqueria".

## `texasAddressOnly` (type: `boolean`):

Drop out-of-state companies from the franchise source.

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

Stop after this many businesses in total (newest first). You pay only for saved records.

## `socrataAppToken` (type: `string`):

Optional free data.texas.gov app token for higher rate limits on very large pulls. Not needed for normal use.

## Actor input object example

```json
{
  "sources": [
    "salesTax",
    "franchise"
  ],
  "daysBack": 7,
  "counties": [
    "Travis",
    "Williamson"
  ],
  "cities": [],
  "zipPrefixes": [],
  "naicsPrefixes": [],
  "entityCategories": [],
  "keywords": [],
  "texasAddressOnly": false,
  "maxResults": 25
}
```

# Actor output Schema

## `items` (type: `string`):

No description

## `summary` (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 = {
    "sources": [
        "salesTax",
        "franchise"
    ],
    "daysBack": 7,
    "counties": [
        "Travis",
        "Williamson"
    ],
    "maxResults": 25
};

// Run the Actor and wait for it to finish
const run = await client.actor("great_stuff/texas-new-business-leads").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 = {
    "sources": [
        "salesTax",
        "franchise",
    ],
    "daysBack": 7,
    "counties": [
        "Travis",
        "Williamson",
    ],
    "maxResults": 25,
}

# Run the Actor and wait for it to finish
run = client.actor("great_stuff/texas-new-business-leads").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 '{
  "sources": [
    "salesTax",
    "franchise"
  ],
  "daysBack": 7,
  "counties": [
    "Travis",
    "Williamson"
  ],
  "maxResults": 25
}' |
apify call great_stuff/texas-new-business-leads --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,great_stuff/texas-new-business-leads"
        }
    }
}
```

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/j55lde1q80qtSG7ts/builds/bekSL8NTwkb4KmJud/openapi.json
