American Soccer Analysis APIapp.americansocceranalysis.com ↗
Access USL Championship goalkeeper goals-added metrics and xGoals data via 2 endpoints. Filter by season, team, player, date range, and minimum minutes.
What is the American Soccer Analysis API?
This API exposes USL Championship goalkeeper statistics from American Soccer Analysis across 2 endpoints, covering goals-added breakdowns and expected goals data. The get_goalkeepers_goals_added endpoint returns per-player metrics across six action types — Claiming, Fielding, Handling, Passing, Shotstopping, and Sweeping — while get_goalkeepers_xgoals delivers shot-stopping efficiency figures including goals conceded vs. xGoals faced. Data is available from the 2017 season onward.
curl -X GET 'https://api.parse.bot/scraper/16cc59c4-5fe8-4fae-8d52-428bc4e6363e/get_goalkeepers_goals_added?season_name=2023&split_by_teams=true&minimum_minutes=500' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace app-americansocceranalysis-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: USLC Goalkeeper Stats — bounded, re-runnable; every call capped."""
from parse_apis.uslc_goalkeeper_stats_api import USLCGoalkeepers, NotFoundError
client = USLCGoalkeepers()
# List goalkeeper goals-added stats for 2023 season with minimum 900 minutes
for gk in client.goalkeepergoalsaddeds.list(season_name="2023", minimum_minutes=900, limit=5):
print(gk.player_id, gk.minutes_played, gk.shotstopping_goals_added_raw)
# Drill into xGoals data for the same season
xg = client.goalkeeperxgoalses.list(season_name="2023", minimum_minutes=900, limit=1).first()
if xg:
print(xg.player_id, xg.shots_faced, xg.goals_conceded, xg.xgoals_gk_faced)
# Filter by team using split_by_teams
for gk in client.goalkeepergoalsaddeds.list(season_name="2023", split_by_teams="true", limit=3):
print(gk.player_id, gk.team_id, gk.passing_goals_added_raw)
# Typed error handling
try:
results = client.goalkeeperxgoalses.list(season_name="2023", stage_name="Regular Season", limit=3)
for gk in results:
print(gk.player_id, gk.saves, gk.goals_divided_by_xgoals_gk)
except NotFoundError as exc:
print(f"not found: {exc}")
print("exercised: goalkeepergoalsaddeds.list / goalkeeperxgoalses.list")
Get USLC goalkeeper goals-added data. Returns per-player stats across 6 action types: Claiming, Fielding, Handling, Passing, Shotstopping, Sweeping. Each action type includes raw goals added, goals added above average, and action count. Results can be filtered by season, team, player, date range, and minimum minutes played. Without filters, returns all goalkeepers across all available seasons. Note: season_name and date range (start_date/end_date) are mutually exclusive filters.
| Param | Type | Description |
|---|---|---|
| team_id | string | Team ID(s) to filter by, comma-separated. |
| end_date | string | End date filter in YYYY-MM-DD format. Mutually exclusive with season_name. |
| player_id | string | Player ID(s) to filter by, comma-separated. |
| start_date | string | Start date filter in YYYY-MM-DD format. Mutually exclusive with season_name. |
| season_name | string | Season year(s) to filter by, comma-separated (e.g. '2023' or '2022,2023'). Earliest available: 2017. Mutually exclusive with start_date/end_date. |
| split_by_teams | string | Whether to split stats by team. Accepted values: 'true', 'false'. |
| minimum_minutes | integer | Minimum minutes played filter. |
{
"type": "object",
"fields": {
"total": "integer count of goalkeeper records returned",
"goalkeepers": "array of goalkeeper objects with player_id, team_id, minutes_played, and per-action-type goals_added_raw, goals_added_above_avg, count_actions"
}
}About the American Soccer Analysis API
Goals-Added Endpoint
The get_goalkeepers_goals_added endpoint returns a goalkeepers array with one object per player per season (or per team, when split_by_teams=true). Each object includes player_id, team_id, minutes_played, and six action-type blocks. For each of Claiming, Fielding, Handling, Passing, Shotstopping, and Sweeping, the response includes goals_added_raw, goals_added_above_avg, and an action count. You can filter by season_name (comma-separated years back to 2017), player_id, team_id, start_date/end_date, and minimum_minutes to scope results to a meaningful sample size.
xGoals Endpoint
The get_goalkeepers_xgoals endpoint returns shot-stopping efficiency data per goalkeeper. Response fields include shots_faced, goals_conceded, saves, share_headed_shots, xgoals_faced, goals minus xGoals, and goals divided by xGoals. It supports the same season and team filters as the goals-added endpoint, plus a stage_name parameter (e.g. Regular Season) and a split_by_games flag to break results down match by match. The total integer at the top level of both responses indicates how many records matched the query.
Filtering and Coverage
Both endpoints accept comma-separated values for player_id, team_id, and season_name, making multi-season or multi-player queries straightforward. Date-range filtering via start_date and end_date (YYYY-MM-DD) allows analysis within partial seasons. Coverage spans USL Championship (USLC) goalkeeper data from 2017 onward; earlier seasons are not available.
The American Soccer Analysis API is a managed, monitored endpoint for app.americansocceranalysis.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when app.americansocceranalysis.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official app.americansocceranalysis.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Rank USLC goalkeepers by
goals_added_above_avgacross Shotstopping actions for a given season - Compare a goalkeeper's goals-conceded vs. xGoals-faced ratio over multiple seasons using
get_goalkeepers_xgoals - Identify goalkeepers with high
share_headed_shotsfaced to assess aerial workload differences by team - Filter
get_goalkeepers_goals_addedbyminimum_minutesto build a qualified leaderboard that excludes small samples - Split goalkeeper stats by team using
split_by_teams=trueto evaluate performance after mid-season transfers - Track Passing action goals-added for goalkeepers to assess ball-playing contribution beyond shot-stopping
- Break down per-game xGoals data with
split_by_games=trueto spot hot or cold stretches across a season
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does American Soccer Analysis offer an official developer API?+
itscalledsoccer (available at github.com/American-Soccer-Analysis/itscalledsoccer) that wraps their data. It targets R and Python users directly rather than exposing a conventional REST API for general application development.What does `get_goalkeepers_xgoals` return beyond a basic save count?+
saves and shots_faced, the endpoint returns xgoals_faced (expected goals from shots the keeper faced), a goals-minus-xGoals figure showing over- or under-performance, goals divided by xGoals as a ratio, and share_headed_shots indicating the proportion of shots that were headers. The split_by_games parameter lets you retrieve each of these per match rather than aggregated.Does the goals-added endpoint cover Sweeping and Claiming actions separately?+
goals_added_raw, goals_added_above_avg, and action count fields in the response, so you can isolate any single action type without aggregating client-side.Does this API cover MLS or USL League One goalkeeper data?+
Is there a way to get goalkeeper data split by individual match result (win/loss/draw)?+
split_by_games parameter on get_goalkeepers_xgoals returns per-game rows, but result context is not part of the response schema. You can fork this API on Parse and revise it to add match-result filtering if that breakdown is needed.