AS 360 Benchmarking Architecture

Industry-wide risk intelligence from every available source

RIDE Score™ benchmarks operator performance against a unified baseline constructed from 10 independent data sources spanning 40+ years of U.S. amusement safety data — regulatory records, hospital surveillance, product recalls, consumer complaints, service bulletins, occupational injuries, and annual industry surveys.

10
Data sources integrated
~47K+
Incident records (historical)
1984–2024
Coverage window
4 × 4
Pillars × data layers

The complete source inventory

Each source is classified by data freshness, automation method, and which RIDE Score pillars it feeds. Together they form the most comprehensive amusement safety dataset ever assembled for operator benchmarking.

Live API
CPSC NEISS
U.S. Consumer Product Safety Commission
National Electronic Injury Surveillance System. Probability-weighted ER injury estimates from ~100 hospitals. Product codes 1293 (amusement devices), 3295 (water slides), 3259 (go-karts). The only continuously updated public source for amusement ride injuries in the U.S. 20 years rolling data available online.
Coverage 2005–2024
Refresh Annual (April)
Records ~750/yr (weighted to ~22K nat'l)
Pillars D   E
Static CSV
Saferparks 2017 Dataset
RidesDatabase.org (now owned by AIMS)
~8,300 accident reports from 2017 public records requests to state/federal agencies. Richest field set: bus_type, device_category, manufacturer, mechanical flag, category, acc_state, num_injured, acc_date, gender, age. Data collection may resume under AIMS.
Coverage 2010–2017
Refresh Frozen (AIMS TBD)
Records ~8,300
Pillars R   I   D   E
📚
Static CSV
Saferparks Legacy Dataset
RidesDatabase.org (now owned by AIMS)
~15,000 accident reports from earlier records requests (2000, 2002, 2004, 2006, 2007). Same field structure as 2017 set. Dates range from 1986–2009, bulk clustered in 1999–2007. Enables long-run trend analysis for device categories and manufacturers.
Coverage 1986–2009
Refresh Frozen
Records ~15,000
Pillars R   I   D   E
🏥
Static
Saferparks NEISS Extract
Saferparks via CPSC
Pre-processed NEISS hospital ER data for 2013–2017, filtered to amusement-relevant product codes and categorized by device type. Bridges the gap between raw NEISS data and the Saferparks taxonomy. Includes Saferparks' own Tableau analysis.
Coverage 2013–2017
Refresh Frozen
Records ~1.33 MB CSV
Pillars D   E
Scrape JS
CARES Service Bulletins
Council of Amusement & Recreational Equipment Safety / RidesDatabase
Archived manufacturer service bulletins with ride/device mappings. Links specific OEMs to safety actions, restraint modifications, height requirement changes. JS-rendered site requires Puppeteer/Playwright scrape. Directly feeds Integrity pillar — operator compliance with open bulletins is a RIDE Score input.
Coverage Historical (semi-current)
Refresh Monthly scrape
Records 100+ bulletins
Pillars I
🎯
Member PDF
IAAPA / NSC Ride Safety Report
International Assoc. of Amusement Parks & Attractions + National Safety Council
Annual fixed-site ride safety survey — the only source providing injury stats specific to fixed-site amusement parks. 2023 survey covered 208 parks, 64% of total North American attendance. Includes water slide safety report. Establishes the 1-in-15.5M serious injury rate benchmark. Member-gated.
Coverage 2003–present (annual)
Refresh Annual (IAAPA Expo)
Records Aggregate stats (not raw)
Pillars D   E
Live Scrape
OSHA IMIS / SIR Database
Occupational Safety & Health Administration
Occupational accident investigation database searchable by keyword. Contains abstracts from OSHA-170 forms dating to 1984. Covers employee-side incidents at amusement venues — a separate dimension from patron injuries. The SIR (Severe Injury Reports) dataset is bulk-downloadable. Signals staffing, training, and safety culture deficiencies.
Coverage 1984–present
Refresh Daily (rolling)
Records ~100+ amusement-related
Pillars R
📰
Scrape Unstructured
CoasterForce / Media Incident Tracker
CoasterForce + Coasterpedia + global media
Crowdsourced chronological index of theme park and amusement ride incidents worldwide, sourced from media reports. Fills the 2018–present gap where Saferparks data collection stopped. Unstructured but valuable for recency. Includes the Woodcock 2019 global incidence study methodology (182 events, 38 countries).
Coverage 2000–present (global)
Refresh Rolling (days)
Records Unstructured, 100s
Pillars D   I
Live REST API
CPSC Recalls API
U.S. Consumer Product Safety Commission
REST API returning decades of consumer product recall data in JSON/XML. Filter for amusement-related recalls by product type. Captures manufacturer-level recall actions (e.g. Chance Rides YO-YO recall covering 85 rides nationwide). Names specific manufacturers and hazard descriptions — the only source that flags active product recalls against an operator's fleet.
Coverage 1970s–present
Refresh Live (API)
Records Sparse but high-severity
Pillars I
📣
Live OData API
SaferProducts.gov
CPSC — Public Consumer Complaint Database
Consumer-submitted harm reports with OData API and bulk download. Captures incidents that never reached an ER (and therefore never appear in NEISS). Names specific manufacturers and products. Lower signal-to-noise than NEISS but catches a different slice of incidents — patron complaints, near-misses, and minor injuries that fell below hospital thresholds.
Coverage 2011–present
Refresh Rolling (days)
Records Bulk download + API
Pillars D   I

Data flow: sources → ETL → RIDE Score benchmarks

All sources converge through a crosswalk/harmonization layer in Airtable, then feed into the Power BI AS 360 model as benchmark reference tables alongside live operator data from the GSA checklists, queue feeds, and weather APIs.

DATA SOURCES CPSC NEISS Saferparks 2017 Saferparks Legacy SP NEISS Extract CARES Bulletins IAAPA / NSC Report OSHA IMIS / SIR CoasterForce / Media CPSC Recalls API SaferProducts.gov HARMONIZATION Airtable ETL SP_Benchmark base SP_Crosswalk SP_Accidents_2017 SP_Accidents_Legacy SP_NEISS_Current SP_CARES_Bulletins SP_OSHA_SIR SP_CPSC_Recalls SP_SaferProducts POWER BI MODEL AS 360 v18 384+ measures, 28 sections S28: Industry Benchmarks mGSA_Submissions QTX_Feed / WX_Feed REV_Feed Calendar RIDE_Score_v2 BENCHMARK OUTPUTS Operator Benchmark Report RIDE Score vs. industry baseline by segment Phase 3 Insurance Dashboard PHLY / Alive Risk / American Specialty Manufacturer Risk Profiles OEM recall + mechanical rate + bulletins RIDE SCORE PILLARS R Readiness I Integrity D Delivery E Environment R — Staffing levels, training gaps, OSHA occupational incident rates I — Mechanical failure rates, SB compliance, recalls, manufacturer risk D — Guest incident rates, consumer complaints, injury severity E — Seasonal patterns, weather-adjusted risk, state regulatory context

Source → pillar traceability matrix

Every data source maps to one or more RIDE Score pillars. This matrix shows what each source contributes to the composite benchmark, and the specific fields that flow into each pillar's calculation.

Source R — Readiness I — Integrity D — Delivery E — Environment
CPSC NEISS National injury estimates by product code; severity (hospitalization rate) Seasonal distribution; age/sex demographics
Saferparks 2017 Operator-reported descriptions; staffing context in narratives mechanical flag; manufacturer failure rates num_injured; category (cause); device_category incident rates acc_date seasonality; acc_state regulatory context
Saferparks Legacy Long-run trend in operator-caused incidents Historical mechanical rate by OEM; 20-year device reliability curves Historical incident baselines by bus_type Multi-decade seasonality validation
SP NEISS Extract ER-treated injury patterns by device type Injury distribution by month, age cohort
CARES Bulletins Open bulletin count per OEM/device; restraint modifications; compliance status
IAAPA / NSC 1-in-15.5M injury rate benchmark; injuries per million attendance Year-over-year trend; regional participation rates
OSHA IMIS / SIR Employee fatality/injury rate at amusement SIC codes; investigation abstracts
CoasterForce / Media Recent malfunction reports (2018–present) Recent incident counts by ride type (global)
CPSC Recalls API Active recall status per manufacturer/ride model; hazard descriptions; recall scope (unit count)
SaferProducts.gov Consumer-reported manufacturer defects; product-specific complaints Sub-ER-threshold incidents; patron complaints; near-miss reports

Saferparks field → AS 360 taxonomy mapping

The SP_Crosswalk table in Airtable normalizes Saferparks' inconsistent field values to the AS 360 standard taxonomy, enabling DAX joins across all benchmark tables.

device_category AS360_RideType 7 categories
bus_type AS360_OperatorSegment 17 park types
manufacturer AS360_OEM_Code Fuzzy match
industry_sector AS360_IndustrySector Filter key
category AS360_CauseCode NLP cleanup
acc_state AS360_StateCode Direct map
mechanical AS360_MechFlag Binary 0/1
acc_date AS360_Calendar[Date] Date parse
num_injured AS360_InjuryCount Integer
age / gender AS360_Demographics Youngest patron

Section 28: Industry Benchmarks (skeleton)

New DAX measure block for the AS 360 Power BI model. These measures reference the SP_Benchmark tables connected via Airtable Web API connector and joined through the SP_Crosswalk dimension.

[Benchmark_IncidentRate_ByCategory] D — Delivery
// Industry incident rate per device category per year DIVIDE( CALCULATE( COUNTROWS( SP_Accidents ), USERELATIONSHIP( SP_Accidents[device_category], SP_Crosswalk[SP_DeviceCategory] ) ), DISTINCTCOUNT( SP_Accidents[acc_year] ), 0 )
Annualized incident count for the operator's device category segment. Denominator uses distinct years in the dataset to normalize for uneven collection periods.
[Benchmark_MechanicalRate_ByOEM] I — Integrity
// Mechanical failure rate per manufacturer DIVIDE( CALCULATE( COUNTROWS( SP_Accidents ), SP_Accidents[mechanical] = 1 ), COUNTROWS( SP_Accidents ), 0 )
Proportion of incidents attributed to mechanical causes for a given manufacturer, sliced by OEM via SP_Crosswalk. Compare to operator's ride fleet to flag high-mechanical-risk OEMs.
[Benchmark_SeasonalityIndex] E — Environment
// Monthly incident distribution (normalized to annual average = 1.0) DIVIDE( COUNTROWS( SP_Accidents ), DIVIDE( CALCULATE( COUNTROWS( SP_Accidents ), ALL( Calendar[Month] ) ), 12 ), 1 )
Ratio of current month's incidents to the annual monthly average. Values >1.0 indicate above-average risk months (expect June–August peaks ~1.8–2.2x baseline).
[RIDE_vs_Benchmark_Percentile] All Pillars
// Operator's RIDE Score percentile vs. industry benchmark distribution VAR _OperatorScore = [RIDE_Score_Composite] VAR _BenchmarkMedian = [Benchmark_IncidentRate_ByCategory] VAR _BenchmarkStdDev = [Benchmark_StdDev_ByCategory] RETURN NORM.DIST( _OperatorScore, _BenchmarkMedian, _BenchmarkStdDev, TRUE )
Positions the operator's composite RIDE Score on a normal distribution fitted to the benchmark segment. Output: percentile rank (0–1). "This operator is performing at the 78th percentile for amusement parks with this device mix."
[Benchmark_StateRiskIndex] E — Environment
// Incident density by state, normalized per 100K population DIVIDE( COUNTROWS( SP_Accidents ), RELATED( StatePop[Population] ) / 100000, 0 )
Adjusts raw state incident counts for population. Cross-references RidesDatabase 50-state regulatory agency data to weight by inspection regime strength.
[Benchmark_OSHA_ReadinessFlag] R — Readiness
// Binary flag: operator's SIC code appears in OSHA SIR within 3 years VAR _OpSIC = SELECTEDVALUE( Operator[SIC_Code] ) VAR _Recent = CALCULATE( COUNTROWS( SP_OSHA_SIR ), SP_OSHA_SIR[SIC] = _OpSIC, SP_OSHA_SIR[Date] >= TODAY() - 1095 ) RETURN IF( _Recent > 0, 1, 0 )
Checks if the operator's industry classification has recent OSHA severe injury reports. Triggers a Readiness pillar deduction when the operator's SIC code cluster shows elevated occupational risk.
[Benchmark_ActiveRecalls_ByOEM] I — Integrity
// Count of active CPSC recalls for manufacturers in operator's fleet VAR _FleetOEMs = VALUES( OperatorFleet[Manufacturer] ) RETURN CALCULATE( COUNTROWS( SP_CPSC_Recalls ), SP_CPSC_Recalls[Manufacturer] IN _FleetOEMs )
Counts active product recalls from CPSC that match manufacturers in the operator's ride fleet. Any non-zero value is a high-severity Integrity flag — the manufacturer has a federal recall outstanding on a product type the operator may be running.
[Benchmark_ConsumerComplaints_ByOEM] D — Delivery
// Consumer complaint volume from SaferProducts.gov per manufacturer CALCULATE( COUNTROWS( SP_SaferProducts ), USERELATIONSHIP( SP_SaferProducts[Manufacturer], SP_Crosswalk[SP_Manufacturer] ), SP_SaferProducts[DateReceived] >= TODAY() - 1825 // 5-year window )
Volume of consumer harm reports filed against manufacturers in the operator's fleet over a 5-year rolling window. Captures sub-ER incidents and near-misses that NEISS doesn't see. High complaint volume per OEM signals elevated Delivery risk for operators running that equipment.

Build sequence

Phased implementation from static ingest through automated refresh. Priority ordered by data value and automation feasibility.

01
Static ingest
Download Saferparks CSVs (2017 + Legacy + NEISS extract) from ridesdatabase.org. Load into Airtable SP_Benchmark base.
One-time • ~24K records • 3 tables
02
Build crosswalk
Create SP_Crosswalk table mapping Saferparks values to AS 360 taxonomy. Fuzzy match manufacturers. NLP-classify cause categories.
Manual + scripted • ~200 unique mappings
03
NEISS live feed
Query CPSC NEISS for product codes 1293, 3295, 3259. Download annual datasets (2018–2024) to fill the post-Saferparks gap. Set annual refresh calendar.
Annual • Query Builder + CSV • ~6 years fill
04
Power BI connect
Connect SP_Benchmark to AS 360 Power BI model via Airtable Web API connector. Build Section 28 DAX measures. Wire to Calendar table.
Same connector pattern as mGSA_Submissions
05
CARES scraper
Puppeteer/Playwright script to extract manufacturer → bulletin mappings from ridesdatabase.org/cares/bulletins/. Load to SP_CARES_Bulletins.
GitHub Action • Monthly cadence
06
OSHA SIR ingest
Download OSHA Severe Injury Reports dataset. Filter to amusement SIC codes (7996, 7941). Load to SP_OSHA_SIR table. Set quarterly refresh.
Bulk CSV • Quarterly • SIR Dashboard
07
CPSC Recalls API
Query CPSC Recalls REST API filtered for amusement-related product types. Load to SP_CPSC_Recalls with manufacturer, hazard, recall date, unit count. Cross-reference against operator fleet manufacturers.
REST API • JSON • Monthly poll
08
SaferProducts.gov
Bulk download or OData API query for consumer harm reports matching amusement product categories. Load to SP_SaferProducts. Filter noise, extract manufacturer names and incident descriptions.
OData API • Bulk download • Quarterly
09
IAAPA/NSC access
Obtain IAAPA membership access to annual Fixed-Site Ride Safety Report. Extract aggregate benchmarks (injuries/million attendance). Manual PDF parse annually.
Member-gated • Annual • Aggregate only
10
Phase 3 dashboard
Build insurance carrier-facing benchmark view. "This operator is at the Nth percentile for their segment." Wire RIDE_vs_Benchmark_Percentile to carrier report template.
PHLY • Alive Risk • American Specialty

⚠ Data integrity caveats

Saferparks explicitly notes this data "cannot be ethically used to compare or contrast the safety of different rides, parks, carnivals, or states" due to non-uniform reporting criteria across jurisdictions and time periods. CPSC NEISS data covers mobile (carnival) rides under CPSC jurisdiction but fixed-site parks are excluded from CPSC's regulatory authority. The IAAPA/NSC report is the only source covering fixed-site parks specifically.

AS 360 positions all benchmark data as directional industry context, not definitive safety rankings — the same approach credit scoring uses. RIDE Score measures an operator's relative position within an imperfect but comprehensive distribution, not their absolute safety record.