Prerequisites
Knowledge of FRC rules helpful Basic spreadsheet skills

What is an FRC Match?

An FRC match is a short, fast-paced bout between two alliances (three robots per alliance). Matches typically last around 2 minutes 30 seconds and are divided into a 15-second autonomous period—robots run preprogrammed routines—followed by the teleoperated period where drivers control robots, with the final ~30 seconds commonly used as the endgame for high-value actions (climbs, hooks, balance, etc.).

Scoring opportunities depend on the season's game and include placing game pieces, completing objectives, earning bonuses, and avoiding penalties. For scouting, break each match into discrete events (auto outcomes, teleop cycles, endgame results) and capture timing metrics (cycle time, consistency, fouls) to build reliable performance profiles.

Pro Tip

Every game is different in some way, and scouting forms often need to be remade each season. It is best recommended that when developing scouting systems, you build on a flexible engine to ensure better long-term scouting sustainability.

Match Structure

There are 3 major parts of a match: the autonomous period, the teleoperated period, and the endgame. Each part has different scouting needs and opportunities.

Autonomous Period

The autonomous period is the first 15 seconds of the match where robots operate based on pre-programmed instructions without driver input. Scouting during this period focuses on tracking which teams successfully complete their autonomous routines, the specific actions they perform (e.g., crossing the auto line, scoring game pieces), and any penalties incurred. This data can provide early insights into a team's programming capabilities and strategic approach.

Teleoperated Period

The teleoperated period is the main portion of the match where drivers control their robots. Scouting during this period focuses on tracking robot performance, driver skill, and strategic execution. This data can provide insights into a team's ability to adapt to changing game conditions and execute their game plan effectively.

Endgame

The endgame is the final 30 seconds of the match where teams often attempt high-value actions such as climbing, hooking, or balancing. Scouting during this period focuses on tracking which teams successfully complete endgame objectives, the specific actions they perform, and any penalties incurred. This data can provide critical insights into a team's ability to perform under pressure and secure valuable points in the closing moments of the match.

Common Mistake

It's common when scouting to forget to move onto the teleop and endgame sections of the form after scouting auto. This can lead to a lot of missing data for those sections, which are often more important than auto data.

Example: Simple Match Form

Below is a minimal example of a match scouting data structure in JSON format — the same data a digital scouting app might produce after each match, specifically expanding on what could real-time-vs-post-match-scouting-workflows:

JSON
{
            "matchId": "2025REG-QR23",
            "event": "Regional Championship 2025",
            "level": "qualification",
            "scheduledTime": "2025-04-12T14:30:00Z",
            "recordedAt": "2025-04-12T14:32:10Z",
            "recordedBy": "Scout_12",
            "recordingMode": "real-time",
            "alliances": {
                "red": {
                    "teams": [
                        { "teamNumber": 1678 },
                        { "teamNumber": 254 },
                        { "teamNumber": 9876 }
                    ]
                },
                "blue": {
                    "teams": [
                        { "teamNumber": 1114 },
                        { "teamNumber": 2056 },
                        { "teamNumber": 323 }
                    ]
                }
            },
            "teamData": [
                {
                    "teamNumber": 1678,
                    "alliance": "red",
                    "autonomous": {
                        "attempted": true,
                        "crossedLine": true,
                        "scored": [
                            { "piece": "cone", "count": 1, "points": 3 },
                            { "piece": "cube", "count": 0, "points": 0 }
                        ],
                        "penalties": 0,
                        "notes": "Clean auto, crossed line and scored one cone."
                    },
                    "teleop": {
                        "cycles": [
                            { "start": "2025-04-12T14:32:40Z", "end": "2025-04-12T14:33:10Z", "action": "score cone", "points": 2 },
                            { "start": "2025-04-12T14:33:45Z", "end": "2025-04-12T14:34:12Z", "action": "score cone", "points": 2 }
                        ],
                        "cyclesCompleted": 2,
                        "totalPoints": 4,
                        "avgCycleSeconds": 27
                    },
                    "endgame": {
                        "attempted": true,
                        "result": "successful",
                        "type": "climb",
                        "level": "high",
                        "points": 12
                    },
                    "penalties": [
                        { "timestamp": "2025-04-12T14:34:30Z", "type": "minor", "points": -3, "description": "contact" }
                    ],
                    "derived": {
                        "matchTotal": 16,
                        "consistencyScore": 0.88
                    }
                },
                {
                    "teamNumber": 1114,
                    "alliance": "blue",
                    "autonomous": {
                        "attempted": true,
                        "crossedLine": false,
                        "scored": [],
                        "penalties": 0,
                        "notes": "Auto failed to complete route."
                    },
                    "teleop": {
                        "cycles": [
                            { "start": "2025-04-12T14:33:05Z", "end": "2025-04-12T14:33:35Z", "action": "score cube", "points": 2 }
                        ],
                        "cyclesCompleted": 1,
                        "totalPoints": 2,
                        "avgCycleSeconds": 30
                    },
                    "endgame": {
                        "attempted": false,
                        "result": "none",
                        "points": 0
                    },
                    "penalties": [],
                    "derived": {
                        "matchTotal": 2,
                        "consistencyScore": 0.42
                    }
                }
            ],
            "penalties": [
                { "teamNumber": 1678, "timestamp": "2025-04-12T14:34:30Z", "type": "minor", "points": -3, "reason": "contact" }
            ],
            "score": {
                "red": 55,
                "blue": 47,
                "winner": "red",
                "scoreBreakdown": {
                    "red": { "auto": 9, "teleop": 34, "endgame": 12 },
                    "blue": { "auto": 6, "teleop": 29, "endgame": 12 }
                }
            },
            "timingSummary": {
                "matchDurationSec": 150,
                "autonomousSec": 15,
                "teleopSec": 105,
                "endgameSec": 30
            },
            "notes": "Red alliance coordinated quick cycles; blue had a missed auto. Watch team 1114 auto routines next match.",
            "schemaVersion": "1.0"
        }

Next Steps

Matches can be much more complex than this example, and real scouting systems often need to handle additional complexities like multiple recording modes (real-time vs post-match), media attachments (photos/videos), and integration with external data sources (e.g., The Blue Alliance API). However, the core principles of structuring match data around discrete events, timing metrics, and derived insights remain consistent regardless of complexity. With a solid match data structure in place, you can build powerful tools for analysis, visualization, and strategic decision-making.