# Pinnacle de-vigged fair odds — no-vig prices for EV models

**Use case:** 

Every market line comes back with its vig removed: noVigFairPrice, noVigProb and the market overround, de-vigged per market (moneyline, each spread and each totals line independently). Pinnacle's de-vigged price is the sharpest public estimate of true probability — the baseline you calibrate a model on, and what you measure a softer book against to find +EV. Line movement included.

## Input

```json
{
  "books": [
    "pinnacle"
  ],
  "sports": [
    "soccer",
    "tennis",
    "basketball"
  ],
  "leagueFilter": [],
  "marketTypes": [
    "h2h",
    "spreads",
    "totals"
  ],
  "mode": "pre_match_only",
  "priceFormat": "decimal",
  "maxEventsPerSport": 100,
  "includeAlternateLines": false,
  "includeBestPriceFlag": true,
  "deduplicationWindowSeconds": 30,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "includeFairOdds": true,
  "includeLineMovement": true
}
```

## Output

```json
{
  "scrapedAt": {
    "label": "Scraped at",
    "format": "string"
  },
  "book": {
    "label": "Book",
    "format": "string"
  },
  "sport": {
    "label": "Sport",
    "format": "string"
  },
  "league": {
    "label": "League",
    "format": "string"
  },
  "homeTeam": {
    "label": "Home",
    "format": "string"
  },
  "awayTeam": {
    "label": "Away",
    "format": "string"
  },
  "commenceTime": {
    "label": "Commence",
    "format": "string"
  },
  "isLive": {
    "label": "Live",
    "format": "boolean"
  },
  "matchClock": {
    "label": "Clock",
    "format": "string"
  },
  "matchScore": {
    "label": "Score",
    "format": "object"
  },
  "marketType": {
    "label": "Market",
    "format": "string"
  },
  "marketLine": {
    "label": "Line",
    "format": "number"
  },
  "outcomeKey": {
    "label": "Outcome",
    "format": "string"
  },
  "outcomeLabel": {
    "label": "Label",
    "format": "string"
  },
  "price": {
    "label": "Decimal",
    "format": "number"
  },
  "priceAmerican": {
    "label": "American",
    "format": "number"
  },
  "priceFractional": {
    "label": "Fractional",
    "format": "string"
  },
  "impliedProbability": {
    "label": "Implied %",
    "format": "number"
  },
  "isBestPriceAcrossBooks": {
    "label": "Best",
    "format": "boolean"
  },
  "eventId": {
    "label": "Event ID",
    "format": "string"
  },
  "snapshotId": {
    "label": "Snapshot ID",
    "format": "string"
  },
  "overround": {
    "label": "Overround",
    "format": "number"
  },
  "noVigProb": {
    "label": "No-vig prob",
    "format": "number"
  },
  "noVigFairPrice": {
    "label": "No-vig fair price",
    "format": "number"
  },
  "previousPrice": {
    "label": "Prev price",
    "format": "number"
  },
  "priceChange": {
    "label": "Change",
    "format": "number"
  },
  "priceChangePct": {
    "label": "Change %",
    "format": "number"
  },
  "impliedProbChange": {
    "label": "Prob change",
    "format": "number"
  },
  "moveDirection": {
    "label": "Direction",
    "format": "string"
  },
  "secondsSincePreviousPrice": {
    "label": "Secs since prev",
    "format": "number"
  },
  "previousPriceAt": {
    "label": "Prev price at",
    "format": "string"
  },
  "firstSeenPrice": {
    "label": "First seen price",
    "format": "number"
  },
  "firstSeenPriceAt": {
    "label": "First seen at",
    "format": "string"
  },
  "moveSinceFirstSeen": {
    "label": "Move since first",
    "format": "number"
  },
  "moveSinceFirstSeenPct": {
    "label": "Move since first %",
    "format": "number"
  }
}
```

## About this Actor

This example demonstrates how to use [Sports Betting Odds Scraper — Tennis, Soccer + 5K Props](https://apify.com/zhorex/sports-odds-aggregator.md) with a specific input configuration. Visit the [Actor detail page](https://apify.com/zhorex/sports-odds-aggregator.md) to learn more, explore other use cases, and run it yourself.


## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
This Task's input is already configured above — use it as-is rather than inventing a new one.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For full API examples (JavaScript, Python, CLI, MCP, OpenAPI), see this Task's Actor page: https://apify.com/zhorex/sports-odds-aggregator.md

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).
