Hockey League Scraper — SHL, AHL, DEL & 15 more avatar

Hockey League Scraper — SHL, AHL, DEL & 15 more

Under maintenance

Pricing

Pay per usage

Go to Apify Store
Hockey League Scraper — SHL, AHL, DEL & 15 more

Hockey League Scraper — SHL, AHL, DEL & 15 more

Under maintenance

Scrape standings, schedules and player stats from 18 hockey leagues across Europe and North America. Writes clean JSON/CSV to your own S3 or Cloudflare R2. Built by The Hockey Brain (https://www.thehockeybrain.com) for scheduled production use.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

The Hockey Brain

The Hockey Brain

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 hours ago

Last modified

Share

European + North American Hockey League Scraper

Production-ready multi-league hockey data Actor from The Hockey Brain.

Scrapes standings, schedules, player/goalie stats, and game results from 18 professional hockey leagues, then writes bronze JSON/CSV to S3-compatible storage (Cloudflare R2, AWS S3, Hetzner Object Storage, MinIO, …).


Features

  • One Actor, many leagues — select source in input
  • Daily incremental modes (update / both) plus test / full where supported
  • Playwright where needed (e.g. Metal Ligaen); HTTP/API for HockeyTech, SIHF, CSV portals
  • Designed for schedules (cron) — no interactive UI required
  • Storage via standard S3 env vars (easy R2 / AWS cutover)

Supported leagues (source)

sourceLeagueRegionTypical stack
metMetal LigaenDenmarkPlaywright
shlSHLSwedenHTTP / CSV
haHockeyAllsvenskanSwedenHTTP / CSV
sdhlSDHLSwedenHTTP
suiNational LeagueSwitzerlandSIHF API
elhTipsport ExtraligaCzechiaHTTP
ahlAHLNorth AmericaHockeyTech API
echlECHLNorth AmericaHockeyTech API
delPENNY DELGermanyHTTP / API
del2DEL2GermanyHTTP / API
sklTipsport / MaxaSlovakiaHTTP
magnusLigue MagnusFranceHTTP
eihlEIHLUKHTTP
phlTAURON PHLPolandHTTP
iceICE HLAustriahockeydata
ersteAlps / ErsteAT/AT/IThockeydata
swehockeystats.swehockey.seSwedendate checkpoint + game_id set in R2
nhlNHL APINorth Americacatch-up from last by_date in R2

Not in this Actor (yet): Elite Prospects full scrape (ep), Norwegian EHL bulk — separate Actors / internal jobs.

Input

{
"source": "shl",
"mode": "update",
"runPipeline": false
}
FieldTypeDefaultDescription
sourceenummetLeague id (table above)
modeenumupdateupdate, both, test, full, daily, full-all
runPipelinebooleantrueRun MotherDuck load after scrape when a pipeline exists

For Store / SaaS buyers, set runPipeline: false and read only from your own S3/R2 — MotherDuck is optional.

Authentication & storage (Actor environment)

Set these in Actor Settings → Environment variables (mark keys as secret):

VariableRequiredDescription
S3_ENDPOINT or HETZNER_ENDPOINTyese.g. https://<account>.r2.cloudflarestorage.com or Hetzner
S3_ACCESS_KEY or HETZNER_ACCESS_KEYyesAccess key
S3_SECRET_KEY or HETZNER_SECRET_KEYyesSecret key
S3_REGION or HETZNER_REGIONnoDefault auto (R2) / eu-central (Hetzner)
MOTHERDUCK_TOKENnoOnly if runPipeline: true

Per-league bucket overrides (optional): MET_S3_BUCKET, SHL_S3_BUCKET, HA_S3_BUCKET, AHL_S3_BUCKET, …

Default bronze buckets use league prefixes (met-scraper, shl-raw, ahl-scraper, …). Override per source if you prefer your own names.

Output

  • Files in your S3/R2 bucket (league-specific prefixes)
  • Dataset row on success:
{
"source": "shl",
"mode": "update",
"modeFallbackApplied": false,
"runPipeline": false,
"status": "ok",
"storage": "https://<account>.r2.cloudflarestorage.com"
}

If you pass an unsupported mode for a source, the Actor falls back to a safe source-specific default and sets modeFallbackApplied: true.

Memory & cost guidance

Source classSuggested memoryNotes
HTTP / API / CSV1024 MBSHL, HA, AHL, ECHL, DEL, …
Playwright2048 MBmet

Avoid large manual runs on Apify Free (~$5/mo). Prefer Schedules.

Create one Apify Schedule per league (cron UTC). Example SHL daily:

  • Cron: 0 8 * * *
  • Input: {"source":"shl","mode":"update","runPipeline":false}
  • Memory: 1024 MB

Create one schedule per league. Start weekly; move to daily after you have measured compute cost.

Commercial positioning

Use this Actor as a reliable ingestion layer rather than a one-off scrape:

  • Stable source ids and explicit run modes.
  • S3/R2-first output (no lock-in to a vendor analytics stack).
  • Deterministic success row in dataset for monitoring and support.
  • No buyer dependency on MotherDuck when runPipeline: false.

Suggested buyer offer

  • Pay-per-event: $0.99 per successful league scrape (league-scrape-completed).
  • Buyer also pays Apify platform compute for the run.
  • Recommended schedule: weekly per league to start; daily after proving costs.
  • Starter packaging: 1–2 leagues, weekly.
  • Growth: 3–6 leagues, daily schedules, setup support.
  • Pro: 7+ leagues, source mix optimization and runbook customization.

Scrapers target public stats pages and official APIs. Buyers must ensure their use complies with each site’s terms and applicable law. Respect robots/rate limits; do not overload source sites. This Actor is provided as-is for analytics / research pipelines.

Changelog

  • 0.4 — Public identity is The Hockey Brain (https://www.thehockeybrain.com). Crawler User-Agents point at the project site, not a personal GitHub account.
  • 0.1 — Multi-league dispatcher; S3/R2-ready env aliases.

Support

Product: The Hockey Brain
Contact: thehockeybrain.com/contact