Skip to main content
Boofstream integrates with Start.gg and Parry.gg to automatically pull tournament data, player information, and bracket details. This eliminates manual data entry and ensures accurate player tags, pronouns, and seeding information.

Supported Platforms

Start.gg

Full integration with Start.gg (formerly Smash.gg) tournaments

Parry.gg

Native support for Parry.gg tournament platform

Start.gg Integration

Boofstream uses the Start.gg GraphQL API to fetch tournament data:

Player Data Import

When you load a tournament, boofstream fetches all entrant information:
const INIT_GQL = `query($tournamentSlug: String, $eventSlug: String) {
  tournament(slug: $tournamentSlug) {
    admins {
      player { gamerTag, prefix }
      genderPronoun,
      authorizations(types: [TWITTER]) { externalUsername }
      location { state, country }
    }
  }
  event(slug: $eventSlug) {
    entrants(query: { perPage: 500 }) {
      nodes {
        id,
        initialSeedNum,
        participants {
          gamerTag, prefix,
          player {
            user {
              genderPronoun
              authorizations(types: [TWITTER]) { externalUsername }
              location { state, country }
            }
          }
        }
      }
    }
  }
}`;
Boofstream automatically includes tournament admins in the player list, making it easy to add commentators who may not be registered as entrants.

Retrieved Player Data

For each player, boofstream imports:
  • Gamertag: Player’s in-game name
  • Sponsor/Prefix: Team or sponsor tag
  • Seed: Tournament seeding number
  • Pronouns: Gender pronouns from Start.gg profile
  • Twitter: Twitter/X handle
  • Location: Country and state/region
players.push({ 
    entrantId: entrant.id, 
    player: {
        sponsor: participant.prefix || "",
        name: participant.gamerTag,
        pronouns: player.user.genderPronoun || "",
        twitter: player.user.authorizations ? player.user.authorizations[0].externalUsername : "",
        score: 0,
        losers: false,
        country: COUNTRIES_TO_CODES[player.user.location.country] || "",
        state: player.user.location.state || "",
        seed: entrant.initialSeedNum,
    } 
});

Set/Match Loading

Boofstream can fetch all sets from an event to help you quickly load the next match:
const SETS_GQL = `query($eventSlug: String) {
  event(slug: $eventSlug) {
    sets(perPage: 500) {
      nodes {
        id
        fullRoundText
        winnerId
        phaseGroup { phase { name } }
        slots {
          entrant { id }
        }
      }
    }
  }
}`;
Each set includes:
  • Player IDs: Links to entrant data for both players
  • Round: Display text like “Winners Round 1” or “Grand Finals”
  • Phase: Pool name or bracket phase
  • Completion Status: Whether the set has been played
Start.gg integration supports up to 500 entrants and 500 sets per event. Larger tournaments may require multiple API calls.

Parry.gg Integration

Boofstream uses Parry.gg’s gRPC API for tournament data:

Authentication

const auth = { "X-API-KEY": config.startgg.token };
const eventClient = new EventServiceClient("https://grpcweb.parry.gg");
Despite the config field being named startgg.token, you should use your Parry.gg API key when connecting to Parry.gg tournaments.

Player Information

Parry.gg provides similar player data:
for (const entrant of entrants) {
    const user = entrant.getEntrant()?.getUsersList()[0];
    players.push({
        entrantId: entrant.getEntrant().getId(),
        player: {
            name: user?.getGamerTag() || "",
            seed: entrant.getSeed(),
            pronouns: user?.getPronouns() || "",
            country: user?.getLocationCountry().toLowerCase(),
            state: user?.getLocationState(),
            sponsor: "",  // Not available on Parry.gg
            twitter: "",  // Not available on Parry.gg
            score: 0,
            losers: false,
        }
    });
}
Parry.gg does not provide sponsor/prefix or Twitter data. You’ll need to enter these manually if needed for your stream.

Bracket Loading

Parry.gg requires you to specify the exact bracket path:
// URL format: https://parry.gg/tournament-slug/event-slug/phase-slug/bracket-slug
const slugs = {
    tournamentSlug: "test-tournament-019c9d96",
    eventSlug: "melee-singles",
    phaseSlug: "main",
    bracketSlug: "bracket"
};
Boofstream loads:
  • All matches in the bracket
  • Round labels (Winners R1, Losers R2, etc.)
  • Seed assignments to match slots
  • Match completion status

User Workflow

Setting Up Tournament Integration

  1. Get API Token:
  2. Configure boofstream: Enter your token and tournament URL
  3. Initialize Tournament: Click “Load Tournament” in the UI
  4. View Players: Browse the imported player list

Loading a Set

  1. Fetch Sets: Click “Load Sets” to get all matches
  2. Select Match: Choose the set you want to stream
  3. Auto-Populate: Player data fills in automatically
  4. Verify: Check that the correct players are loaded
  5. Start Set: Begin tracking scores and games

Time Saved

No manual typing of player names, tags, or seeds

Accuracy

Data comes directly from tournament registration

Pronouns

Automatically includes player pronouns from profiles

Seeding

Shows tournament seeds for context

Country and State Flags

Boofstream converts location data into flag assets:
function convertCountry(country: string) {
    return {
        "asset": `./assets/country_flag/${country}.png`,
        "code": country.toUpperCase(),
    };
}

function convertState(country: string, state: string) {
    return {
        "asset": `./assets/state_flag/${country.toUpperCase()}/${state}.png`,
        "code": state,
    };
}
Flag images are automatically included in the exported state for use in stream overlays.

Output Format

Tournament data is exported to out/program_state.json:
{
    "tournamentInfo": {
        "tournamentName": "Genesis X"
    },
    "score": {
        "1": {
            "team": {
                "1": {
                    "player": {
                        "1": {
                            "name": "Mango",
                            "team": "C9",
                            "seed": 1,
                            "pronoun": "he/him",
                            "twitter": "C9Mango",
                            "country": { "code": "US", "asset": "..." },
                            "state": { "code": "CA", "asset": "..." }
                        }
                    }
                }
            },
            "phase": "Pools",
            "match": "Winners Round 1"
        }
    }
}
This structured format makes it easy to integrate with custom overlays and graphics packages.
Result Reporting: While boofstream tracks detailed game-by-game results, automatic result reporting to Start.gg or Parry.gg is not currently exposed in the API. You’ll need to manually report results through the tournament platform.

Build docs developers (and LLMs) love