npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

n8n-nodes-oddsrelay

v0.1.0

Published

n8n node for the OddsRelay odds API: matched boards, raw bookmaker and exchange prices, events and sports, with a token cap on every call that spends tokens.

Readme

n8n-nodes-oddsrelay

An n8n community node for OddsRelay, the pre-match odds API for UK and Irish bookmakers, with Betfair, Smarkets, Matchbook and BETDAQ lay prices. Read matched boards (bookmaker back prices paired with exchange lay prices), the raw board of every price, one event's prices, and the sport, event and bookmaker lists behind them, in any workflow or as a tool for an n8n AI Agent.

Every call that spends tokens can ask the API for its price first, which is free, and stop above a cap you set for each input item (Max Tokens). The cap stays where you set it unless you let an AI Agent's model fill it.

Installation · Credentials · Operations · Token Spend · Use with AI agents · Example workflows · Errors · Compatibility · Resources

Installation

Follow n8n's community nodes installation guide. In short: Settings, Community Nodes, Install, then enter n8n-nodes-oddsrelay.

Credentials

You need an OddsRelay API key.

  1. Sign up at app.oddsrelay.io/signup and copy your key from the dashboard. Free gives you 50,000 tokens for 14 days from sign-up, with no card, then no tokens until you choose a plan, on the same key. Plans and token prices.
  2. In n8n, create an OddsRelay API credential and paste the key into API Key.
  3. Save. n8n tests the key by reading your account's usage, which costs no tokens.

The node sends the key only to https://api.oddsrelay.io, in the Authorization: Bearer header. n8n stores it encrypted, and the node never writes it to its output or its error messages.

Operations

| Resource | Operation | What it returns | Tokens | |---|---|---|---| | Board | Get Matched | One item per event on a matched board: Standard, 2Up, Dutching, Each Way, Extra Place or BOG. Filter by sports, bookmakers, exchanges, markets and start time | Spends; Token Spend applies | | Board | Get Raw | One item per event with every bookmaker and exchange price. Filter by sports, leagues, bookmakers, markets, event IDs, start time and last change; paged | Spends; Token Spend applies | | Event | Get Many | The upcoming events of one sport, with their IDs; paged | None | | Event | Get Odds | One event's prices at every bookmaker and exchange that carries it | Spends; Token Spend applies | | Sport | Get Many | Sport and competition keys, for the sport filters; paged | None | | Bookmaker | Get Many | Bookmaker and exchange keys, for the bookmaker filters | None | | Coverage | Get | Which bookmakers and exchanges carry which sports on each board | None | | Account | Get Usage | Your plan, token balance, reset time and the key's scope | None |

Lists take Return All or a Limit. The bookmaker and exchange filters load their choices from the API, and the sport for Event, Get Many can be picked from a searchable list or typed as a key such as soccer_england_premier_league. Most operations also take a Region (left empty, the API uses uk); the odds operations take an Odds Format (decimal or moneyline) and a Date Format (ISO 8601 or Unix seconds).

Token Spend

Board, Get Matched; Board, Get Raw; and Event, Get Odds spend tokens from your account. Their Token Spend setting decides how:

  • Check Price First (the default): the node asks the API what the call costs (a quote, which spends nothing) and makes the call only if the price fits in Max Tokens. Otherwise it stops with the price, and nothing is spent. Max Tokens is the most the node may spend per input item: when Get Raw pages through results, each page is priced first, and a page that would go over stops the paging, keeps the rows already read and says so.
  • Price Only: returns the quote (cost, remaining, rate_card) and spends nothing. Use it to see what a set of filters costs before you schedule it.
  • No Check: makes the call without asking its price.

The price is set by the filters you send: one sport and a few bookmakers cost less than a whole board. Cutting the output with Limit on Get Matched does not change the price; on Get Raw, Limit sets the page size, so a smaller Limit is cheaper.

Use with AI agents

The node is usable as a tool, so an n8n AI Agent can call it: add OddsRelay under the agent's Tool connection and let the model fill the parameters you choose. Leave Token Spend on Check Price First with a small Max Tokens: when a call would cost more, the agent gets the price and a note to narrow the filters, and nothing is spent. Give the agent Sport, Get Many and Bookmaker, Get Many as tools too, so it can look up the keys the other operations take.

If OddsRelay does not appear among the agent's tools on a self-hosted n8n, check n8n's documentation for your version on using community nodes as tools.

Example workflows

A matched board for one sport. examples/matched-board.json is a workflow you can import (Workflows, Import from File): a manual trigger, then OddsRelay reading the Standard board for soccer at Ladbrokes and William Hill, the h2h market only, capped at 500 tokens, first 20 events. Pick your OddsRelay API credential on the OddsRelay node, then run it. Each output item is one event, with its markets, the back price at each bookmaker and the lay prices beside them.

Odds into a sheet on a schedule. Schedule Trigger, then OddsRelay (Board, Get Matched, with your filters), then Google Sheets (Append or Update Row), mapping event_id, commence_time and the prices you need. Run Board, Get Matched once with Token Spend set to Price Only to see what each run will cost.

An odds assistant. Chat Trigger, then an AI Agent with a chat model and OddsRelay as a tool (Board, Get Matched with Token Spend on Check Price First, plus Sport, Get Many and Bookmaker, Get Many). Ask it, for example, which of tonight's events have prices at the bookmakers you name.

Output

Lists come back as one n8n item per row: per event for the boards and events, per sport, per bookmaker or exchange. Coverage, Account and Event, Get Odds come back as one item. Fields keep the API's names, such as event_id, commence_time, markets and outcomes; see the API docs.

Errors

| What happened | What the node says | |---|---| | The key was not accepted (401) | Check the API key in the OddsRelay credential | | Not enough tokens left (402) | The price and your balance, as the API states them, and that nothing was spent | | The key's plan does not include the data asked for (403) | The API's reason, and to check your plan with Account, Get Usage | | A filter value the API does not know (400) | The API's message and, where it sends them, the values it accepts | | Too many requests (429) | The node waits for the time the API asks (up to a minute) and tries again, up to three tries in all; then it says how long to wait | | A call priced above Max Tokens | The price and what is left of Max Tokens; nothing was spent |

Every error from the API carries its request ID. Turn on the node's On Error setting (Continue) to get errors as output items instead of stopping the workflow.

Compatibility

Built with n8n's @n8n/node-cli 0.50.2 against n8n-workflow 2.41, on n8n's community node API version 1. It has no runtime dependencies.

Develop

npm ci --ignore-scripts
npm run lint
npm test            # builds, then runs the node against the API's example responses; no network calls
npm run dev         # n8n with this node loaded, for trying it by hand

test/smoke.mjs makes a few real calls through the built node with your own key: ODDSRELAY_KEY=your_key node test/smoke.mjs after npm run build. It spends a handful of tokens at most.

Resources

Version history

See CHANGELOG.md.

License

MIT