Explore the full API reference below. Subscribe to get your API key and start pulling data.
Subscribe to Premium to create your API key and start making requests.
Everything you need to pull Nevada gaming revenue data into your database or pipeline.
All API requests use this single endpoint.
https://www.nvgamingapi.com/api/v1/gamingInclude your API key in the x-api-key header with every request.
x-api-key: nvg_your_api_key_herecurl -H "x-api-key: YOUR_API_KEY" \ "https://www.nvgamingapi.com/api/v1/gaming?month=2024-01®ion=clark&game=baccarat"
/api/v1/gamingRetrieve Nevada gaming revenue data. Returns monthly records filtered by the query parameters you provide. All monetary values are in thousands of dollars.
| Parameter | Type | Required | Description | Example |
|---|---|---|---|---|
| month | string | Optional | Filter by month in YYYY-MM format. Omit to return all available months. | 2024-01 |
| region | string | Optional | Filter by geographic region. Partial match supported (e.g., "clark" matches "Clark County"). | clark |
| game | string | Optional | Filter by game name. Partial match supported (e.g., "slot" matches "Slot Machines"). | slots |
All parameters support case-insensitive partial matching. Combine multiple parameters to narrow your results.
{
"data": [
{
"year": 2024,
"month": "January",
"month_num": 1,
"tier": "free",
"records": [
{
"game_name": "Slot Machines",
"category": "Slots",
"region": "Clark County",
"location_type": "All Locations",
"current_month": {
"win_amount": 734521.3,
"num_units": 58432,
"num_locations": 198,
"pct_change": 0.0312,
"win_percent": 0.0742
},
"three_months": { ... },
"twelve_months": { ... }
}
]
}
],
"meta": {
"total_months": 1,
"tier": "premium"
}
}| Field | Type | Description |
|---|---|---|
| game_name | string | Name of the game or game category |
| category | string | Game category (e.g., "Slots", "Table Games", "Sports") |
| region | string | Geographic region in Nevada |
| location_type | string | Type of gaming location |
| win_amount | number | Revenue in thousands of dollars (e.g., 734521.3 = $734,521,300) |
| num_units | number | Number of active gaming units/machines |
| num_locations | number | Number of gaming locations reporting |
| pct_change | number | Year-over-year percentage change as a decimal (0.0312 = 3.12%) |
| win_percent | number | Win percentage as a decimal (0.0742 = 7.42%) |
Each record contains three time periods: current_month, three_months, and twelve_months, all with the same fields above. Values may be null if data is unavailable.
month parameter to retrieve every available month in a single request. Ideal for initial database loads.import requests
import pandas as pd
API_KEY = "YOUR_API_KEY"
BASE_URL = "https://www.nvgamingapi.com/api/v1/gaming"
# Fetch all available data (omit month param for all months)
response = requests.get(
BASE_URL,
headers={"x-api-key": API_KEY}
)
data = response.json()
print(f"Total months: {data['meta']['total_months']}")
# Flatten all months into a single DataFrame
rows = []
for month in data["data"]:
for record in month["records"]:
for period in ["current_month", "three_months", "twelve_months"]:
row = {
"year": month["year"],
"month": month["month"],
"month_num": month["month_num"],
"game_name": record["game_name"],
"category": record["category"],
"region": record["region"],
"location_type": record["location_type"],
"period": period,
**record[period],
}
rows.append(row)
df = pd.DataFrame(rows)
print(f"Total rows: {len(df)}")
print(df.dtypes)
# Write to CSV or load directly into your database
df.to_csv("nv_gaming_full.csv", index=False)CREATE TABLE gaming_revenue (
id SERIAL PRIMARY KEY,
year INTEGER NOT NULL,
month VARCHAR(20) NOT NULL,
month_num INTEGER NOT NULL,
game_name VARCHAR(100) NOT NULL,
category VARCHAR(100),
region VARCHAR(200) NOT NULL,
location_type VARCHAR(200),
period VARCHAR(20) NOT NULL, -- current_month, three_months, twelve_months
win_amount DECIMAL(14, 2), -- in thousands of dollars
num_units INTEGER,
num_locations INTEGER,
pct_change DECIMAL(10, 4), -- YoY change as decimal (0.0312 = 3.12%)
win_percent DECIMAL(10, 4), -- win percentage as decimal
created_at TIMESTAMP DEFAULT NOW(),
UNIQUE (year, month_num, game_name, region, location_type, period)
);
-- Recommended indexes for common queries
CREATE INDEX idx_revenue_month ON gaming_revenue (year, month_num);
CREATE INDEX idx_revenue_region ON gaming_revenue (region);
CREATE INDEX idx_revenue_game ON gaming_revenue (game_name);The UNIQUE constraint lets you use INSERT ... ON CONFLICT (Postgres) or REPLACE INTO (MySQL) for idempotent upserts when re-fetching data.
Some records contain incomplete data. Your ingestion pipeline should handle two cases:
| Scenario | What You'll See | Recommended Handling |
|---|---|---|
| Missing numeric value | "pct_change": null | Store as NULL in your database |
| No data for a period | "current_month": {} | Skip the row or insert with all numeric fields as NULL |
# Python: safely handle empty period objects
for period in ["current_month", "three_months", "twelve_months"]:
period_data = record.get(period, {})
if not period_data:
continue # skip empty periods
row = {
"win_amount": period_data.get("win_amount"),
"num_units": period_data.get("num_units"),
"pct_change": period_data.get("pct_change"),
# ... other fields
}API access requires an active Premium subscription. Each month in the response includes a tier field indicating the data classification:
| Tier Label | Description |
|---|---|
| free | Historical data older than 12 months. Available on the website without a subscription, and included in all API responses. |
| premium | Recent data from the last 12 months. Only available to Professional and Business subscribers via the API and dashboard. |
As a Premium subscriber, your API responses include both free and premium tier data. The tier field is informational only — it indicates the age of the data, not your access level.
| Code | Status | Description |
|---|---|---|
| 200 | OK | Request succeeded. Response body contains the requested data. |
| 400 | Bad Request | Invalid query parameters. Check that month is in YYYY-MM format. |
| 401 | Unauthorized | Missing or invalid API key. Ensure you're sending the x-api-key header. |
| 403 | Forbidden | API key is valid but revoked or lacks permission for the requested resource. |
| 429 | Too Many Requests | Rate limit exceeded. Back off and retry after a short delay. |
| 500 | Server Error | An unexpected error occurred. If this persists, contact support. |
{
"error": "Invalid API key"
}Rate Limits
All accounts are limited to 1,000 requests per day for abuse prevention. Since gaming data updates once per month, this is more than sufficient for any typical use case. We also recommend keeping requests under 60 per minute for reliable performance.
month param) to load all historical data, then fetch only new months going forward.UNIQUE constraint in your schema for idempotent upserts so re-fetching the same month is safe.{}) and null values — see the Null Handling section above.