# NY Mobile Sports Betting Revenue — Statewide & DraftKings (`zinin/ny-sports-betting-revenue`) Actor

Get official New York mobile sports wagering handle, GGR, provider revenue, adjustments and education revenue by month. Statewide and DraftKings reports with fiscal-year selection, source cells and missing months; excludes retail sportsbook totals.

- **URL**: https://apify.com/zinin/ny-sports-betting-revenue.md
- **Developed by:** [Tim Zinin](https://apify.com/zinin) (community)
- **Categories:** Games, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $8.50 / 1,000 monthly observation delivereds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#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

## New York Mobile Sports Betting Revenue — Statewide & DraftKings

Retrieve monthly sports wagering data from the [New York State Gaming Commission's official revenue reports](https://gaming.ny.gov/revenue-reports). Use the data for market research, regulator-report ingestion and operator benchmarking.

This version covers **New York Statewide and DraftKings mobile sports wagering** monthly reports. It returns handle, gross gaming revenue (GGR), net platform provider revenue, prior-period adjustments/fines/penalties and net education revenue. Retail sportsbook totals, all individual operators and other US states are outside this version's scope.

### Start with the current fiscal year

```json
{}
```

The default fetches both reports for the fiscal year currently underway in New York. A fiscal year begins in April. To retrieve DraftKings for April 2025–March 2026:

```json
{
  "reports": ["draftkings"],
  "fiscalYear": 2025
}
```

No source API key or URL configuration is required. The Actor follows only the official report's fixed alias and its matching dated XLSX route on `gaming.ny.gov`. Future or unavailable fiscal years produce an explicit diagnostic; selecting a future year does not predict revenue.

At the start of April, the new fiscal-year worksheet may not have been published yet. In that case, select the previous fiscal year explicitly; the Actor does not silently substitute a different reporting year.

At the September 10, 2026 observation, both current-year reports contained numeric values for April–August 2026, with seven remaining month rows blank. Counts can change as reports are published or revised.

### Monthly output

The Dataset contains monetary observations with `recordType=sports_wagering_month` and unbilled diagnostic rows with `recordType=diagnostic`. Filter by `recordType` when importing amounts.

| Field | Meaning |
|---|---|
| `reportLabel`, `period`, `fiscalYear` | Statewide or DraftKings, year/month and fiscal-year span |
| `handleUsd` | Total amount wagered; this is not revenue or profit |
| `grossGamingRevenueUsd` | Reported gross gaming revenue |
| `netProviderRevenueUsd` | Reported net revenue to platform provider |
| `adjustmentsFinesPenaltiesUsd` | Reported prior-period adjustments, fines and penalties |
| `netEducationRevenueUsd` | Reported net revenue to education |
| `sourceCells`, `rawNumericValues` | Original XLSX cell coordinates and cached numeric values |
| `rawSourceDate`, `sourceDateCell` | Original date value and its cell; the day need not be the first |
| `sourceUrl`, `sourceFinalUrl`, `sourceSheet` | Official alias, actual received version URL and worksheet |
| `sourceWorkbookSha256`, `observedAt` | SHA-256 of the received XLSX bytes and UTC acquisition time |

All five `*Usd` display values are **decimal strings rounded to cents**, using half-up rounding. Raw workbook numbers are also preserved. For each numeric month, provider revenue plus education revenue, minus adjustments, must reconcile to GGR within two cents after rounding.

**Statewide already includes individual operators. Do not add Statewide and DraftKings totals as if they were separate markets.** The title inside each workbook is generic; report identity is verified from the exact official download route and received bytes, not inferred from the title. Figures are source observations, not independently audited company profit.

### Coverage and partial results

`OUTPUT` in the default key-value store contains report provenance, available-month counts, `missingPeriods`, `rejectedPeriods`, failures and delivery status. It contains no monthly monetary amounts.

- `completed`: all requested workbooks were verified and all available numeric rows were delivered. Blank months can still exist; inspect coverage.
- `partial`: another report failed or one or more months contained invalid/future numeric values. Verified rows are retained and the issue is disclosed.
- `no_numeric_months`: a verified fiscal-year worksheet contained no usable numeric months. No monthly result events are requested.
- `budget_stopped`: delivery stopped at the run's effective charge limit. Earlier delivered rows remain available.
- `source_unavailable`: none of the requested reports could be verified; the run fails with diagnostics.

`sourceComplete` confirms that all requested workbooks passed validation. It does not mean every month has numeric data; `coverage[].allFiscalMonthsNumeric` answers that separately. `deliveryComplete` confirms delivery of the available verified rows. A platform `SUCCEEDED` status alone does not establish full coverage.

Empty cached cells are reported as `no_cached_numeric_values`, never converted to zero or interpreted as zero activity. Numeric zeros are retained. Non-numeric months are rejected explicitly; a structural change, duplicate period, negative handle or accounting mismatch rejects that report. Numeric months later than the New York observation month are rejected. Reports are retrieved sequentially and may have different publication dates; the pair is not an atomic regulator snapshot.

### Charges

The initial FREE-tier price is **$0.01 per delivered monthly observation**, plus **$0.005 per start**. Ten monthly observations request $0.105 in Actor events at that tier; a complete fiscal year for both reports is at most 24 observations ($0.245). Check the Store pricing panel for the current price, your tier and any other platform charges.

Every delivered month is charged on each run, including unchanged observations and true zero amounts. Diagnostics, missing months and rejected months request no result event. A platform start charge may still apply to an unsuccessful or empty run.

The Actor checks the effective run budget before collection and before each paid row. Under a tight budget, delivery proceeds Statewide first, then DraftKings, April through March within each. Dataset `billing.settlement=unconfirmed_at_write` records the state at the write; settled event counters and `OUTPUT.confirmedResultEvents` confirm charges.

If a Dataset write, charge, or summary readback is uncertain, the Actor stops without retrying that operation. Some rows may already exist or be charged, and a late failure may leave `OUTPUT` absent. Inspect the existing run before launching another billed run. Automatic resurrection is unsupported.

### Source limits

Each fixed HTTPS download is bounded to 5 MiB, three HTTP hops and 30 seconds, with normal TLS verification. Cross-host and wrong-operator redirects are rejected. Parsing uses an isolated Python process, a 30-second deadline, at most 1,000 ZIP entries and 50 MiB declared expanded archive data. Only twelve month rows from the selected fiscal-year sheet are read; the source formulas are not recalculated.

Source layout changes, uncached spreadsheet formulas and temporary outages may interrupt a report. When reporting an issue, include the run URL, selected fiscal year and diagnostic code.

# Actor input Schema

## `reports` (type: `array`):

Statewide includes operator activity: do not add these totals to DraftKings. Delivery order is Statewide then DraftKings, each April through March.

## `fiscalYear` (type: `integer`):

For April 2025 through March 2026 enter 2025. Omit for the fiscal year currently underway in New York. A future or unpublished fiscal year produces a source diagnostic; it is not a forecast.

## Actor input object example

```json
{
  "reports": [
    "statewide",
    "draftkings"
  ]
}
```

# Actor output Schema

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

Filter recordType=sports\_wagering\_month for monetary observations. Dataset billing labels describe intent; run event counters confirm charges.

## `summary` (type: `string`):

Reports available and missing/rejected months, with source hashes and delivery counters. Contains no monthly monetary facts. A late failure can leave OUTPUT absent: inspect the Dataset and run details.

# 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 = {
    "reports": [
        "statewide",
        "draftkings"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("zinin/ny-sports-betting-revenue").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 = { "reports": [
        "statewide",
        "draftkings",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("zinin/ny-sports-betting-revenue").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 '{
  "reports": [
    "statewide",
    "draftkings"
  ]
}' |
apify call zinin/ny-sports-betting-revenue --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,zinin/ny-sports-betting-revenue"
        }
    }
}
```

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/8nwmDj9u40IwFkmUX/builds/G0KL0IRHvjcAw9QQb/openapi.json
