Important
This is an unofficial community project and is not affiliated with, endorsed by, or sponsored by Sleeper or Blitz Studios.
n8n-nodes-sleeper is a read-only n8n community node for public Sleeper fantasy football,
basketball, and hockey data. It needs no credentials and has no runtime dependencies.
The source repository is public at
github.com/christopherjnelson/n8n-nodes-sleeper.
NBA/NHL controls require package version 0.3.0 or newer. Check the installed package version if
the UI does not expose those controls. The four polling events are Draft Pick Made, Transaction
Created or Updated, League Status Changed, and NFL Week Changed.
- 18 deterministic read operations across 14 resources
- Exact opaque string IDs, per-input execution, paired-item links on successful outputs from all 18 actions, and
continueOnFail() - Raw Sleeper response fields without hidden joins, enrichment, caching, or truncation
- Operation-specific NFL, NBA, and NHL public API scope with zero credentials and zero runtime dependencies
- Four Phase 1 polling triggers with first-run baselines and monotonic anti-replay state
usableAsTool: truefor n8n AI agents without bundling an AI dependency
Search for Sleeper from the node picker or canvas. The verified action node is available in the n8n node catalog. The currently approved Cloud version may lag npm and may not include the latest actions or Sleeper Trigger. Confirm the installed version in your environment before relying on specific operations.
Where Community Nodes are supported, open Settings → Community Nodes and enter:
n8n-nodes-sleeper
The installer provides the latest version published to npm. NBA/NHL operations require package
version 0.3.0 or newer. Check the installed package version if the UI does not expose those
controls.
Install the latest version published to npm:
npm install n8n-nodes-sleeperThe retained next selector follows the prerelease channel and may differ from stable:
npm install n8n-nodes-sleeper@nextFor a reproducible install, confirm that the package registry lists the version before pinning it.
The NBA/NHL features require 0.3.0 or newer:
npm install n8n-nodes-sleeper@0.3.0See the community-testing guide for requested test evidence and privacy rules.
Clone this repository, install the locked development dependencies, and run:
pnpm install --frozen-lockfile
npm run devOpen http://localhost:5690 manually. The task-runner broker uses port 5691. The CLI's o
shortcut still targets 5678.
Do not install development builds into an active n8n service.
No credentials are required. The node uses Sleeper's public, read-only API and CDN endpoints.
| Resource | Operation | Required inputs | Optional inputs | Output shape |
|---|---|---|---|---|
| User | Get | Username or User ID | — | One raw user object |
| League | Get | League ID | — | One raw league object |
| League | Get Many for User | User ID, Sport, Season | — | One item per league; an empty array emits no items |
| League User | Get Many | League ID | — | One raw participating-user item |
| Roster | Get Many | League ID | — | One raw roster item |
| Matchup | Get Many | League ID, Week | — | One raw item per roster side |
| Transaction | Get Many | League ID, Round or Week | — | One raw transaction item |
| Playoff | Get Bracket | League ID, Bracket Type | — | One raw bracket-matchup item |
| Traded Pick | Get Many | League ID | — | One league-scoped traded-pick item |
| Draft | Get | Draft ID | — | One raw draft object |
| Draft | Get Many for League | League ID | — | One raw item per associated draft |
| Draft | Get Many for User | User ID, NFL/NBA, Season | — | One item per user draft |
| Draft Pick | Get Many | Draft ID | — | One raw item per recorded pick |
| Draft Traded Pick | Get Many | Draft ID | — | One draft-scoped traded-pick item |
| Player | Get Many | Sport, Active Only, Output Mode | Position; collection: Team, Has Team, Player IDs, Output Fields; Return All/Limit; Sort By/Direction | One keyed map or one item per player-map entry |
| Player | Get Trending | NFL/NBA, Trend Type, Lookback Hours, Limit | — | One raw player-ID/count item |
| Sport | Get State | NFL, NBA, or NHL | — | One raw sport-specific state object |
| Avatar | Get URL | Avatar ID, Image Size | — | One validated { avatar_id, size, url } object |
Usernames can change. Save the stable user_id returned by User → Get for later user
lookups. League and draft IDs are opaque strings and must not be converted to numbers.
League users and rosters are separate API results; this node does not join them. Matchup →
Get Many emits one record per roster side and does not pair records sharing a matchup_id.
Transaction → Get Many uses Sleeper's round path parameter, which commonly corresponds
to an NFL week; NBA round-to-week semantics are not inferred. Draft Traded Pick → Get Many is
draft-scoped; Traded Pick → Get Many is league-scoped. Unsafe numeric opaque IDs in the
draft-scoped traded-pick response are returned as exact strings to avoid JavaScript precision loss. Sport support is operation-specific. Player catalogs support NFL, NBA, and
NHL; trending supports NFL and NBA; user seasonal league and draft listings support NFL and
observed NBA results; sport state supports NFL, NBA, and NHL. Sleeper's current documentation
still labels seasonal user listing routes NFL-only. NHL catalogs support active filtering, but
position filtering is hidden and rejected locally because tested NHL position queries returned
empty results. NHL trending and seasonal user league/draft support are not advertised. NBA
seasonal results are observed live behavior and retain the documentation caveat.
The repository includes importable, inactive workflows with no credentials:
- Get NFL state
- Get NBA state
- Get NHL state
- Get NBA players
- Get NHL players
- Resolve a sample username and retrieve leagues
- Get trending adds with explicit attribution
Replace the clearly marked sample username before running the user-leagues example. The examples are repository resources and are intentionally excluded from the npm tarball.
The separate Sleeper workflow collection includes Preseason League Command Center and Daily Trending Players Digest to Discord. Their own setup guides cover the additional n8n configuration and credentials they require.
Player → Get Many returns Sleeper's object keyed by player ID. The unfiltered response is
approximately 5 MB, so Sleeper recommends fetching it sparingly and generally no more than
once daily. Active Only sends the server-side active=true filter; Position sends a
server-side fantasy-position filter for NFL and NBA. Tested NHL position filters returned an
empty response, so Position is hidden and stale nonempty NHL values fail before a request. Sleeper
documents no single-player endpoint.
NFL and NBA Position use a static dropdown with readable names and Sleeper codes, including
Quarterback (QB) and Point Guard (PG); the default choice is All Positions (empty query
value). NFL choices are DB (defensive
back), DEF (team defense), DL (defensive line), K (kicker), K/P (kicker/punter), LB (linebacker),
LEO, LS (long snapper), OG (offensive guard), OL (offensive line), OT (offensive tackle), P
(punter), QB, RB (running back), TE (tight end), and WR (wide receiver). NBA choices are C
(center), DEF (team entry), PF (power forward), PG (point guard), SF (small forward), and SG
(shooting guard). Saved expressions remain intact when changing sports. To clear a stale NHL
Position, switch to NFL or NBA, choose All Positions, then switch back to NHL. NHL keeps
Position hidden and rejects any stale nonempty saved value locally.
Single Map, the default, emits the keyed object as one n8n item. One Item per Player
preserves each raw player object and map order, adding the string map key as player_id only
when that field is absent. The node performs no caching, deduplication, or static-data storage.
For repeated lookups, fetch a bounded dataset on a schedule and store it externally.
The optional Team, Has Team, Player IDs, and Output Fields controls are in the
player-options collection. They filter or project the fetched map locally; team matching ignores
case, player IDs are comma-separated exact map keys, and Has Team is off unless explicitly set
to true. Output Fields accepts comma-separated flat field names; blank keeps all fields.
Projection runs for both output modes and always retains player_id, falling back to the exact
map key if the player object has no ID. Return All defaults to true; when disabled, Limit
defaults to 50. The top-level Sort By control can use full_name, team, position, or
player_id, with ascending order by default. Sorting applies only to One Item per Player;
Player ID uses numeric-aware string ordering (for example, 200 sorts before 1000) without
converting IDs to numbers. The native map-entry order is retained when no sort is selected.
The node applies filters, then sort, then limit, then field projection. These controls run locally after the player map is fetched; they do not reduce the API response downloaded from Sleeper. They reduce the saved execution history and downstream items. Active and supported position filters remain server-side. Position remains hidden and locally rejected for NHL.
Player → Get Trending defaults to Adds, a 24-hour lookback, and 25 results. Results contain raw player IDs and counts; the node does not fetch the player map or add names or rankings. Sleeper requires attribution when you display or republish its trending-player data. Credit Sleeper in the consuming application, page, report, or downstream output.
Keep request frequency well below Sleeper's documented limit of roughly 1,000 calls per minute. Avoid polling static league or player data unnecessarily, and keep player queries bounded with Active Only and Position whenever possible.
The action node validates required and controlled values before transport, then delegates HTTP
execution and service errors to n8n's declarative request framework. Successful outputs from all
18 actions link to their source input item. Errors raised by n8n's transport or continue-on-fail
handling follow n8n's own error-item behavior and may not carry paired-item metadata. A successful
HTTP response with a null body becomes a focused not-found error; Sleeper has been observed to
return HTTP 200 with null for an unknown user. Invalid response shapes produce a focused
node-operation error. Empty array responses emit no fabricated placeholder item.
Confirm opaque IDs are passed as strings and controlled inputs use one of the choices shown in
the editor. Avatar → Get URL validates the image with a HEAD request, so a missing image or
CDN outage is reported as a request failure. Use the
issue forms for
reproducible defects and private vulnerability reporting
for security reports.
Sleeper exposes public user and league data without authentication. This node does not log in, access private accounts, or request private endpoints. Workflows can still store, transform, or forward returned public data, so workflow owners remain responsible for downstream data handling and retention.
Release feedback remains welcome from clean, supported self-hosted n8n environments. Follow the community-testing guide, then use the structured issue forms for compatibility results, reproducible bugs, or feature requests. Report suspected security issues only through private vulnerability reporting.
The node can be selected as an n8n AI tool. Operations remain deterministic and read-only, and the package contains no AI runtime dependency. Give agents specific user, league, or draft IDs and bounded player queries; do not ask an agent to infer private or unknown identifiers.
- Package engine: Node.js 22.22.0 or newer
- Earlier isolated UI baseline: n8n 2.32.7
- Final 0.3.0 packed-package runtime smoke: n8n 2.42.4 on Node.js 24.18.0 (2026-10-07)
- Node-picker summary check: n8n 2.42.4 on 2026-10-07
- Development CLI:
@n8n/node-cli0.46.4 - Development package manager: pnpm 11.15.0
These are tested versions, not a promise of compatibility with every version admitted by a peer dependency range.
Sport availability depends on the operation. NHL trending and NHL seasonal user league/draft listings are not offered. Sleeper's current docs still call user seasonal league/draft routes NFL only; NBA results are live-observed and retain that caveat. NHL state omits fields available in NFL/NBA state, so raw sport-specific state objects pass through without inferred values. No NBA or NHL week trigger is included; only the existing NFL Week Changed trigger watches global state.
The package continues to omit authentication, lineup changes, adds/drops, trades, draft actions, league-setting changes, chat, Sleeper Picks, paid contests, player search, single-player lookup, composite standings, scoreboards, roster resolution, activity feeds, enrichment, and hidden caching.
Avatar → Get URL makes a HEAD request to the documented CDN URL before emitting it. The
operation therefore fails when the image is missing or the CDN is unavailable; it emits URL
metadata rather than binary image data.
Ordinary action operations use n8n declarative routing. The Sleeper Trigger remains programmatic because polling compares validated responses with persisted state across scheduled invocations.
pnpm install --frozen-lockfile
pnpm run validate
pnpm run typecheck
pnpm run lint
pnpm run format:check
pnpm run test
pnpm run build
pnpm run scan:source
pnpm run smoke:load
pnpm run package:check
pnpm run smoke:installSee CONTRIBUTING.md for scope and contribution rules, docs/testing.md for automated checks, docs/manual-testing.md for the editor smoke guide, and docs/release-readiness.md for current release status and links to the dated release record.
Releases run from reviewed annotated version tags. GitHub Actions validates the exact tagged
source, publishes directly to npm with provenance through GitHub OIDC, verifies the published
package, and then creates the GitHub Release. Versions 0.1.1, 0.2.0, and 0.2.1 used the
former staged flow; see docs/releasing.md for the active procedure and
historical records.
Contributions must preserve the read-only public-API scope, exact workflow values, zero runtime dependencies, and all automated gates. Security reports follow SECURITY.md.
MIT. See LICENSE.
Sleeper API data and names remain the property of their respective owners. Trending-data users must provide the attribution required by Sleeper's API documentation.
The node icon is the current Sleeper-controlled robot favicon, extracted without visual changes from the multi-size icon served by Sleeper's homepage. See branding documentation.
This project is unofficial. It is not affiliated with, endorsed by, sponsored by, or produced by Sleeper or Blitz Studios. Sleeper owns the robot favicon used as the node icon; its inclusion does not imply endorsement.