> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fieldfunded.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Build a Player Props Tracker with Live Odds

> Build a player props tracker with live odds using FieldFunded API. Track points, rebounds, assists, goals, and cards across 30+ sports.

# Build a Player Props Tracker with Live Odds

Player props are the fastest-growing betting market. This guide builds a tracker that fetches player-level markets (points, rebounds, assists, goals, cards, shots) from the FieldFunded API and displays them with live odds updates.

## What Are Player Props?

Player props are bets on individual player performance rather than match outcomes. Examples:

| Sport             | Example Props                 | Market name            |
| ----------------- | ----------------------------- | ---------------------- |
| Basketball (NBA)  | LeBron James Over 25.5 Points | Player Points O/U      |
| Soccer            | Haaland Anytime Goalscorer    | Anytime Goalscorer     |
| American Football | Mahomes Over 2.5 Passing TDs  | Player Passing TDs O/U |
| Tennis            | Djokovic Over 9.5 Aces        | Player Aces O/U        |
| Ice Hockey        | McDavid Over 0.5 Goals        | Player Goals O/U       |

## What You'll Use

| SDK Method       | Endpoint                   | Purpose                                |
| ---------------- | -------------------------- | -------------------------------------- |
| `getEventOdds()` | `GET /v1/events/{id}/odds` | Get all markets including player props |
| `getEvents()`    | `GET /v1/events`           | List events with prop markets          |
| `search()`       | `GET /v1/events/search`    | Find specific player matchups          |
| `checkBet()`     | `POST /v1/bets/check`      | Settle player prop bets                |

## Step 1: Find Player Prop Markets

Player props are returned alongside standard markets in the odds response. Filter by market name patterns:

```typescript theme={null}
import { FieldFundedSDK } from '@fieldfunded/sdk';

const ff = new FieldFundedSDK({
  apiKey: process.env.FIELDFUNDED_API_KEY!,
  baseUrl: 'https://api.fieldfunded.com/v1',
});

const odds = await ff.getEventOdds(eventId);

// Filter for player prop markets
const playerProps = odds.markets?.filter((m: any) => {
  const name = m.name.toLowerCase();
  return (
    name.includes('player') ||
    name.includes('goalscorer') ||
    name.includes('assists') ||
    name.includes('rebounds') ||
    name.includes('points') ||
    name.includes('cards') ||
    name.includes('shots')
  );
}) || [];

console.log(`${playerProps.length} player prop markets found`);
for (const prop of playerProps) {
  console.log(`\n${prop.name}:`);
  for (const sel of prop.selections.slice(0, 5)) {
    console.log(`  ${sel.name}: ${sel.odds}`);
  }
}
```

## Step 2: Build a Player Dashboard

Group props by player name for a clean display:

```typescript theme={null}
interface PlayerLine {
  player: string;
  market: string;
  line: string;
  odds: number;
  market_id: string;
  selection_id: string;
}

function extractPlayerLines(markets: any[]): PlayerLine[] {
  const lines: PlayerLine[] = [];

  for (const market of markets) {
    for (const sel of market.selections) {
      lines.push({
        player: sel.name.split(' - ')[0] || sel.name,
        market: market.name,
        line: sel.name,
        odds: sel.odds,
        market_id: market.id,
        selection_id: sel.id,
      });
    }
  }

  return lines;
}

const lines = extractPlayerLines(playerProps);

// Group by player
const byPlayer = new Map<string, PlayerLine[]>();
for (const line of lines) {
  const existing = byPlayer.get(line.player) || [];
  existing.push(line);
  byPlayer.set(line.player, existing);
}

for (const [player, props] of byPlayer) {
  console.log(`\n${player}:`);
  for (const prop of props) {
    console.log(`  ${prop.market} — ${prop.line}: ${prop.odds}`);
  }
}
```

## Step 3: Track Odds Movements

Poll at intervals to detect line movements — useful for finding value:

```typescript theme={null}
const previousOdds = new Map<string, number>();

async function checkMovements(eventId: string) {
  const odds = await ff.getEventOdds(eventId);
  const props = odds.markets?.filter((m: any) =>
    m.name.toLowerCase().includes('player')
  ) || [];

  for (const market of props) {
    for (const sel of market.selections) {
      const key = `${market.id}_${sel.id}`;
      const prev = previousOdds.get(key);

      if (prev && prev !== sel.odds) {
        const direction = sel.odds > prev ? 'DRIFTED' : 'SHORTENED';
        console.log(
          `${direction}: ${sel.name} in ${market.name}: ${prev} → ${sel.odds}`
        );
      }

      previousOdds.set(key, sel.odds);
    }
  }
}
```

## Step 4: Settle Player Prop Bets

Player props settle automatically through the same [settlement API](/api-reference/settlement/check-bets) as standard markets. Complex props (goalscorer, assists) may take 10-30 minutes after the match ends:

```typescript theme={null}
const result = await ff.checkBet({
  event_id: eventId,
  market: 'Anytime Goalscorer',
  selection: 'Erling Haaland',
  stake: 25,
  odds: 1.65,
  market_id: propMarketId,
  selection_id: propSelectionId,
});

console.log(`Result: ${result.status}`);
console.log(`Payout: $${result.payout}`);
```

## Rate Limit Math

| Scenario                              | Requests/day | Monthly | Plan           |
| ------------------------------------- | ------------ | ------- | -------------- |
| Check props for 5 events daily        | 5            | 150     | Free           |
| Poll 3 events every 5 min for 4 hours | 144          | 4,320   | Free           |
| Track 20 events with 2-min polling    | 2,400        | 72,000  | Starter (\$29) |
| Production prop tracker with alerts   | 5,000        | 150,000 | Starter (\$29) |

Player props are fetched as part of the standard odds response — no extra endpoints or charges.

***

## Related Guides

* [Build a Betting Platform](/guides/build-betting-platform) — integrate player props into a full sportsbook
* [Build a Line Tracker](/guides/build-line-tracker) — track odds movements across all markets
* [Build a Settlement Engine](/guides/build-settlement-engine) — automate prop bet resolution
* [Market Types Reference](/reference/market-types) — full list of supported prop markets

<CardGroup cols={2}>
  <Card title="Get Your Free API Key" icon="key" href="/quickstart">
    Start building in 5 minutes — player props included on all plans
  </Card>

  <Card title="See Pricing" icon="dollar-sign" href="/compare/pricing">
    All plans compared side by side
  </Card>
</CardGroup>
