# How do I get live betting odds into Google Sheets?

> Independent. Not affiliated with, endorsed by or sponsored by Novig.

Canonical: https://novigapi.com/answers/betting-odds-google-sheets
Updated: 2026-11-15

Use Google Apps Script's UrlFetchApp to call an odds API and write rows to a sheet on a timer. Every REST feed here works this way; novigapi.com's guide has a ready script that pulls Novig markets with bid, ask and fair price, 100 rows for 1 credit (checked 15 Nov 2026). (Source: [novigapi.com pricing](https://novigapi.com/pricing))

A sheet is the fastest way to watch a handful of markets without building an app. Keep the refresh interval sane: every 5 minutes is plenty for most boards.

## How the options compare

Odds in a spreadsheet, checked 15 Nov 2026

| Source | Free tier | How usage is counted |
| --- | --- | --- |
| novigapi.com | 100 credits a month, 20 requests a minute, no card | 1 credit per 100 rows on most lists; history reads 3 to 5; bulk CSV 10 |
| The Odds API | 500 credits a month, no historical odds | 1 credit per region per market per odds call |
| TheRundown | 20,000 data points a day, 5-minute delay, no history | Data points a month |
| ParlayAPI | 1,000 credits a month, 48 hours of lookback | Credits, the same math as The Odds API |


## Where novigapi.com falls short

> Apps Script triggers run at most every minute, so a sheet is never a live board, whatever the API's freshness.

## Try it

```javascript
function refresh() {
  const key = PropertiesService.getScriptProperties().getProperty("NOVIGAPI_KEY");
  const res = UrlFetchApp.fetch("https://novigapi.com/api/v1/markets?league=NFL&status=open&limit=100", { headers: { Authorization: "Bearer " + key } });
  const rows = JSON.parse(res.getContentText()).data.map((m) => [m.description, m.outcomes[0].bid, m.outcomes[0].ask, m.outcomes[0].fair]);
  const sh = SpreadsheetApp.getActiveSheet();
  sh.getRange(2, 1, rows.length, 4).setValues(rows);
}
```

Read the [endpoint reference](https://novigapi.com/docs/endpoints), compare [plans and credits](https://novigapi.com/pricing), or send a request from the [playground](https://novigapi.com/playground).

## Questions

### Can I use IMPORTDATA instead?

Not with a key in a header. Use Apps Script so the key stays in script properties.

## Sources

- [The Odds API: plans](https://the-odds-api.com/#get-access)
- [TheRundown: API pricing](https://therundown.io/pricing/api)
- [ParlayAPI: pricing](https://parlay-api.com/pricing)
- [novigapi.com endpoint reference](https://novigapi.com/docs/endpoints)

---

Get a free API key: https://novigapi.com/sign-up . Docs: https://novigapi.com/docs . MCP: https://novigapi.com/api/mcp . Operated by Stunning Couches LLC. Independent. Not affiliated with, endorsed by or sponsored by Novig.
