Texas Sales Tax Allocations
We have monthly sales tax allocation data for every city, county, and special district. Many of them have detailed allocation data back to ~2014 and monthly allocation back to the early '90s.
The allocation model
The allocation model represents a monthly sales tax allocation made by the Texas Comptroller to a local taxing authority. At a minimum, it contains the net payment allocated to the local jurisdiction. More recent data includes all payment components, such as audit adjustments and single local tax rate collections.
-
- Name
dates.allocation_period- Type
- date
- Description
-
The month in which this allocation was released to the locality
-
- Name
dates.sales_period- Type
- date
- Description
-
The month in which current period sales were made (should always be two months prior to `dates.allocation_period`)
-
- Name
dates.formatted- Type
- string
- Description
-
A human readable version of the value in `dates.allocation_period`
-
- Name
jurisdiction- Type
- Jurisdiction
- Description
-
A Jurisdiction model representing the taxing entity
-
- Name
net_payment- Type
- decimal
- Description
-
The net payment made to the taxing entity
-
- Name
prior_collections- Type
- decimal
- Description
-
The total collections representing payments for months prior to the value of `dates.sales_period`
-
- Name
current_collections- Type
- decimal
- Description
-
The total collections representing payments for the value of `dates.sales_period`
-
- Name
future_collections- Type
- decimal
- Description
-
The total collections representing payments after the value of `dates.sales_period`
-
- Name
audit_collections- Type
- decimal
- Description
-
The total value of audit adjustments included in this allocation
-
- Name
single_local_rate_collections- Type
- decimal
- Description
-
The total value of tax allocations under the Single Local Tax Rate rule
-
- Name
unidentified_collections- Type
- decimal
- Description
-
The total value of tax payments allocated as unidentified
-
- Name
total_collections- Type
- decimal
- Description
-
The sum of all collection types
-
- Name
service_fee- Type
- decimal
- Description
-
The value of the Comptroller's 2% service charge
-
- Name
current_retained- Type
- decimal
- Description
-
The amount of current taxes held back as retainage
-
- Name
prior_retained- Type
- decimal
- Description
-
The amount of taxes held as retainage in the prior month which are being released to the jurisdiction
-
- Name
deltas- Type
- object
- Description
-
Year-over-year changes for each numeric field above
-
- Name
trends- Type
- object
- Description
-
Rolling trend analysis for each numeric field above
-
- Name
ytd- Type
- object
- Description
-
Year-to-date totals for each numeric field above
-
- Name
population- Type
- object
- Description
-
The Census population estimate for the year of `dates.sales_period`. Only present when you send `include=population`. See the Population section below
Population
Send include=population to add a Census population estimate to each allocation. Use it to calculate sales tax per capita. Both /api/tx/sales-tax/allocations and /api/tx/sales-tax/allocations/{year}/{month} accept this parameter.
The data comes from the Census Bureau Population Estimates Program and starts in 2000.
Which estimate you get
Each allocation gets the population for the year in which the sales were made. That year comes from dates.sales_period, not from dates.allocation_period. A Texas allocation pays out the sales from two months earlier. So the allocation for February 2024 uses the population for 2023.
The Census Bureau publishes a new set of estimates each year, called a vintage. Each vintage revises the estimates for earlier years. For each year, we keep only the estimate from the newest vintage that covers that year. That is the best current estimate of the population in the year of the sale. For example, vintages 2023 and 2025 both estimate the population in 2022. Sales from 2022 use the vintage 2025 figure.
| Sales year | Estimate year | Source | Vintage |
|---|---|---|---|
| 2000 to 2009 | Same as the sales year | pep_intercensal |
2010 |
| 2010 to 2019 | Same as the sales year | pep_postcensal |
2020 |
| 2020 to 2025 | Same as the sales year | pep_postcensal |
2025 |
| After 2025 | 2025, with is_carried_forward set to true |
pep_postcensal |
2025 |
When the Census Bureau publishes a new vintage, we replace the estimates for the years that it covers. The vintage value of those years changes.
Carried forward and null values
If the sales year is after the newest Census estimate, the response uses that estimate and sets is_carried_forward to true. An estimate is carried forward only if it comes from the newest vintage.
The value is null in these cases:
- Special districts and transit authorities
- Sales years before 2000
- A city that is not in the newest vintage, for sales years after its last estimate
-
- Name
population.value- Type
- integer
- Description
-
The estimated population on July 1 of `population.year`
-
- Name
population.year- Type
- integer
- Description
-
The year of the estimate
-
- Name
population.source- Type
- string
- Description
-
`pep_postcensal` (the 2010 and later estimates) or `pep_intercensal` (the 2000 to 2009 estimates)
-
- Name
population.vintage- Type
- integer
- Description
-
The Census vintage of the estimate, for example `2025`
-
- Name
population.is_carried_forward- Type
- boolean
- Description
-
`true` when the sales period is after the newest Census estimate, so that estimate is used
List all allocations
This endpoint allows you to retrieve a paginated list of all allocations in the database. By default, a maximum of 25 allocations are shown per page.
Optional parameters
-
- Name
jurisdictions- Type
- string
- Description
-
A comma-separated list of jurisdiction IDs for filtering allocations
-
- Name
month- Type
- date
- Description
-
Filter to a specific allocation period. Format: YYYY-MM-DD
-
- Name
between- Type
- string
- Description
-
A comma-separated set of dates for filtering allocations. Format: YYYY-MM-DD,YYYY-MM-DD
-
- Name
since- Type
- date
- Description
-
Filter for allocations after a certain date (inclusive). Format: YYYY-MM-DD
-
- Name
sort- Type
- string
- Description
-
Sort the results by a given field. Prefix with `-` for descending order. Allowed fields: `month`, `net_payment`, `total_collections`, `current_collections`, `prior_collections`, `future_collections`, `audit_collections`. You can also sort by nested relation fields using dot notation: `deltas.{field}`, `trends.{field}`, `ytd.{field}` (e.g. `-deltas.net_payment`)
-
- Name
include- Type
- string
- Description
-
Add optional data to each allocation. Allowed value: `population`
-
- Name
limit- Type
- integer
- Description
-
Limit the number of allocations returned. Default: 25
Request
curl -G https://open.zactax.com/api/tx/sales-tax/allocations \
-H "Authorization: Bearer {token}" \
-d jurisdictions=624 \
-d sort=-month \
-d include=population \
-d limit=1
const response = await fetch('https://open.zactax.com/api/tx/sales-tax/allocations?jurisdictions=624&sort=-month&include=population&limit=1', {
headers: {
'Authorization': 'Bearer {token}'
}
});
const data = await response.json();
Response
{
"data": [
{
"dates": {
"allocation_period": "2024-02-01",
"sales_period": "2023-12-01",
"formatted": "February 2024"
},
"jurisdiction": {
"id": 624,
"name": "Hudson Oaks, Texas",
"slug": "hudson-oaks-texas",
"state": "tx",
"type": "city",
"sales_tax_rate": 0.02,
"sales_tax_id": "2184071"
},
"net_payment": 411453.23,
"prior_collections": 0,
"current_collections": 418057.03,
"future_collections": 6.5,
"audit_collections": -2334.68,
"single_local_rate_collections": 4297.95,
"unidentified_collections": 48.67,
"total_collections": 420075.47,
"service_fee": 8404.27,
"current_retained": 8236.18,
"prior_retained": 7880.39,
"deltas": {
"net_payment": 0.0534,
"current_collections": 0.0612
},
"trends": {
"net_payment": 398234.12,
"current_collections": 405123.45
},
"ytd": {
"net_payment": 823906.46,
"current_collections": 836114.06
},
"population": {
"value": 3204,
"year": 2023,
"source": "pep_postcensal",
"vintage": 2025,
"is_carried_forward": false
}
}
],
"links": {
"first": "...",
"last": "...",
"prev": null,
"next": "..."
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 100,
"per_page": 25,
"to": 1,
"total": 1
}
}