# Texas New Business Leads – New Sales Tax Permits Daily (`deadwood_data_solutions/texas-new-business-leads`) Actor

Every new Texas business the day its sales-tax permit appears — name, owner, address, NAICS industry — enriched with franchise/SOS standing, business age and multi-location operator signals from the Comptroller's registers. ~13.5k new permits/month.

- **URL**: https://apify.com/deadwood\_data\_solutions/texas-new-business-leads.md
- **Developed by:** [K O](https://apify.com/deadwood_data_solutions) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 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 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

## Texas New Business Leads – New Sales Tax Permits Daily

Every business that starts selling anything taxable in Texas must first register a
**sales-tax permit** with the Texas Comptroller. This Actor turns that register into a
same-week **new-business lead feed**: one normalized lead per newly permitted outlet,
with the owner's mailing address, exact NAICS industry, legal form, and two enrichment
layers list brokers don't ship — **franchise/SOS standing + business age** (deterministic
taxpayer-number join against the Comptroller's Active Franchise Taxpayers register) and
**operator history** (is this a first-time entrepreneur or an existing operator opening
location #7?).

All data comes from official Texas open-data registers (`data.texas.gov`) — public
records, no scraping of private platforms, safe to store, use and resell.

### Why buyers use it

- **Merchant services / POS / payments** — reach a business the week it registers, before the first card terminal is installed.
- **Business insurance (BOP, GL, workers' comp)** — new permits = new policies; NAICS + legal form pre-qualifies the book.
- **Payroll, banking, accounting, telecom, signage, suppliers** — every new business buys these in month one.
- **B2B data teams** — 888k-record active-permit archive with `daysBack` up to 365 for aged-list builds.

Commercial "new business lists" retail for roughly **$0.25/record** (e.g. business
mailing lists at $124.95 per 500). This Actor charges **$0.02 per lead** — about
12× cheaper — and it's fresher: you pull straight from the register on your own schedule.

### Measured numbers (live run, 2026-07-14)

| Metric | Measured |
| --- | --- |
| New permits, trailing 30 days | **13,519** |
| New permits, trailing 365 days | 170,130 |
| Active-permit archive depth | 887,984 outlets |
| Business name / street / city / ZIP fill | **400/400 (100%)** |
| NAICS code + industry sector fill | **400/400 (100%)** |
| Legal form (org type) fill | 400/400 (100%) |
| Franchise/SOS match on entity leads (LLC, corp, partnership) | **298/317 (94%)** |
| SOS charter date (business age) when matched | 296/298 |
| Owner personal name (sole proprietors) | 83/400 (21%) |
| Operator history (multi-location / tenure) computed | 400/400 (100%) |
| Multi-location operators flagged in sample | 54/400 (13.5%) |
| First-time operators flagged in sample | 346/400 (86.5%) |

**What it does NOT have:** phone numbers or emails — the Texas registers don't publish
them. Vendors who sell "new business leads with phones" are appending third-party contact
data you typically can't legally reuse or resell. Every field here is native public record.

### Input

| Field | Type | Default | Notes |
| --- | --- | --- | --- |
| `daysBack` | integer | `7` | Permit-issue window, 1–365. Use 1–7 as a fresh feed, 90–365 for aged lists. |
| `naicsPrefixes` | array | `[]` | Server-side industry filter. `722`=restaurants, `23`=construction, `44`/`45`=retail, `8121`=salons, `484`=trucking, `54`=professional services. |
| `cities` | array | `[]` | Outlet city filter (case-insensitive), e.g. `HOUSTON`. |
| `zipPrefixes` | array | `[]` | Outlet ZIP prefix filter, e.g. `77` (Houston), `787` (Austin). |
| `orgTypes` | array | `[]` | `llc`, `corporation`, `soleProprietor`, `partnership`, `nonprofit`, `financialInstitution`, `association`, `trust`, `government`. |
| `includeOutOfStateOwners` | boolean | `true` | ~2–5% of new permits are TX outlets owned from out of state. |
| `includeGovernment` | boolean | `false` | Cities/school districts hold permits too; excluded by default. |
| `enrichFranchise` | boolean | `true` | Franchise/SOS register join (standing, charter date, business age). |
| `operatorHistory` | boolean | `true` | Multi-location + tenure signals from the permit archive. |
| `maxItems` | integer | — | Hard cap on pushed leads. |
| `onlyNewSinceLastRun` | boolean | `true` | Scheduled runs only emit (and charge for) permits not seen before. |

### Output record

One flat JSON object per newly permitted outlet:

- **Identity** — `businessName`, `outletName` (DBA), `ownerName` (sole props: the owner's personal name), `taxpayerNumber`, `orgType`/`orgTypeCode`/`orgGroup`, `isSoleProprietor`
- **Location** — `street`, `city`, `state`, `zip`, `countyCode`, `insideCityLimits`, plus the owner's mailing address (`ownerStreet/City/State/Zip`, `isOutOfStateOwner`)
- **Industry** — `naicsCode` (6-digit, 100% fill), `naicsSector` (plain-English sector)
- **Timing** — `permitIssueDate`, `firstSalesDate`, `permitAgeDays`
- **Franchise/SOS enrichment** — `franchiseMatch`, `franchiseStanding` (Active / Forfeited / …), `sosFileNumber`, `sosCharterDate`, `sosStatus`, `businessAgeYears`, `franchiseTaxBeganDate`
- **Operator history** — `activeOutletsCount`, `isMultiLocation`, `operatorFirstPermitDate`, `operatorTenureYears`, `isFirstTimeOperator`

Example (real record from the verification run):

```json
{
  "businessName": "AW LOGSON LLC",
  "outletName": "AW TIRE",
  "orgType": "Texas Limited Liability Company",
  "street": "2747 RIGSBY AVE",
  "city": "SAN ANTONIO",
  "zip": "78222",
  "naicsCode": "441320",
  "naicsSector": "Retail Trade",
  "permitIssueDate": "2026-07-11",
  "franchiseStanding": "Active",
  "sosCharterDate": "2016-08-17",
  "businessAgeYears": 9.9,
  "activeOutletsCount": 1,
  "isFirstTimeOperator": true
}
```

### Pricing (Pay-Per-Event)

| Event | Price |
| --- | --- |
| `query` (once per run) | $0.01 |
| `new-business-lead` (per pushed lead) | $0.02 |

A daily schedule with `onlyNewSinceLastRun` costs ≈ $9/month for every new business
in Texas (~450/day), or a fraction of that with NAICS/city filters.

### FAQ

**How fresh is the data?** The Comptroller refreshes the register about weekly (measured:
max issue date 3 days behind refresh). Run daily with `onlyNewSinceLastRun: true` and
you'll emit each batch the day it lands, without double-charging.

**Why no phones/emails?** Not in the public record. Everything this Actor ships is
native registry data you can legally store and resell.

**What's `isMultiLocation` good for?** It separates a first-time entrepreneur (86.5% of
leads) from an established operator expanding to a new location — different pitch,
different value. `businessAgeYears` (from the SOS charter date) does the same for
entities that existed before this outlet.

**Sole proprietors?** 21% of leads are sole proprietors where `ownerName` is the actual
person who owns the business — the decision-maker, at their mailing address.

**Restaurants and bars?** Filter `naicsPrefixes: ["722"]`. For established bars with
actual monthly alcohol revenue, see our companion Actor **texas-bar-restaurant-leads**
(Mixed Beverage Gross Receipts). For just-financed businesses see **ucc-filing-leads**;
for new trucking companies with 100% phone fill see **fmcsa-new-carrier-leads**.

**Is this legal to resell?** Yes — Texas government open data (`data.texas.gov`,
datasets `jrea-zgmq` and `9cir-efmm`), published for public reuse.

# Actor input Schema

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

Only return permits issued within the last N days (1–365). Use 1–7 for a fresh daily feed, 90–365 to build large aged-lead lists from the archive (~170k permits in the last 12 months).

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

Filter by NAICS code prefix, applied server-side. Examples: 722 = restaurants & food service, 23 = construction, 44 / 45 = retail, 8121 = salons & barbers, 484 = trucking, 54 = professional services. 2–6 digits each.

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

Only outlets in these Texas cities (case-insensitive exact match, e.g. HOUSTON, SAN ANTONIO, AUSTIN).

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

Only outlets whose ZIP starts with one of these prefixes (e.g. 77 for greater Houston, 787 for Austin).

## `orgTypes` (type: `array`):

Filter by legal form. Values: llc, corporation, soleProprietor, partnership, nonprofit, financialInstitution, association, trust, government. Sole proprietors have the OWNER'S PERSONAL NAME as the lead name.

## `includeOutOfStateOwners` (type: `boolean`):

About 4–5% of new permits are Texas outlets owned from another state (chains, remote sellers). Turn off to keep only Texas-headquartered owners.

## `includeGovernment` (type: `boolean`):

Cities, school districts and agencies also hold sales-tax permits. Excluded by default — they are not sales leads.

## `enrichFranchise` (type: `boolean`):

Deterministic taxpayer-number join against the Comptroller's Active Franchise Taxpayers register: franchise standing (right to transact), SOS file number, charter date, SOS status and business age. Matches entity-type leads (LLCs, corporations) — sole proprietors don't file franchise tax.

## `operatorHistory` (type: `boolean`):

Mines the full permit archive for each taxpayer: count of active outlets, first permit date, operator tenure. Flags isMultiLocation (expansion location of an existing operator) vs isFirstTimeOperator (brand-new entrepreneur).

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

Stop after this many normalized leads have been pushed. Leave blank for no limit.

## `onlyNewSinceLastRun` (type: `boolean`):

Recommended for scheduled runs. Uses persisted state to skip permits already returned earlier, so a recurring schedule only charges for genuinely new registrations.

## Actor input object example

```json
{
  "daysBack": 7,
  "naicsPrefixes": [],
  "cities": [],
  "zipPrefixes": [],
  "orgTypes": [],
  "includeOutOfStateOwners": true,
  "includeGovernment": false,
  "enrichFranchise": true,
  "operatorHistory": true,
  "onlyNewSinceLastRun": true
}
```

# Actor output Schema

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

All normalized records from this run as JSON.

## `resultsCsv` (type: `string`):

All normalized records from this run as CSV.

# 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 = {
    "naicsPrefixes": [],
    "cities": [],
    "zipPrefixes": [],
    "orgTypes": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("deadwood_data_solutions/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 = {
    "naicsPrefixes": [],
    "cities": [],
    "zipPrefixes": [],
    "orgTypes": [],
}

# Run the Actor and wait for it to finish
run = client.actor("deadwood_data_solutions/texas-new-business-leads").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 '{
  "naicsPrefixes": [],
  "cities": [],
  "zipPrefixes": [],
  "orgTypes": []
}' |
apify call deadwood_data_solutions/texas-new-business-leads --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=deadwood_data_solutions/texas-new-business-leads",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/tJusxmxHDuidJOweS/builds/3Sfto7zggnqsLmT7L/openapi.json
