Ballpark Pal APIballparkpal.com ↗
Access Ballpark Pal's MLB simulation-based predictions via API. Fetch probability scores, betting lines, and outcomes across 22 categories for batters, pitchers, teams, and games.
What is the Ballpark Pal API?
The Ballpark Pal API exposes MLB simulation-based prediction data across 3 endpoints and 22 statistical categories, covering batters, pitchers, teams, and games. The core get_most_likely endpoint returns up to 690 outcome rows per date, each carrying a player or team name, probability score, book price, opponent, venue, and a vs_rating — queryable by tab, category, or date.
curl -X GET 'https://api.parse.bot/scraper/2947b4d9-1c07-4bc2-b79b-0b14a6508e9b/get_most_likely?tab=batters&date=2026-07-11&limit=5&category=1' \ -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 ballparkpal-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: BallparkPal SDK — fetch MLB prediction data with probability scores."""
from parse_apis.ballpark_pal_most_likely_outcomes_api import (
BallparkPal, Tab, CategoryId, OutcomesUnavailable
)
client = BallparkPal()
# List all categories to understand the prediction types available.
for cat in client.categories.list(limit=5):
print(cat.name, cat.tab)
# Get today's date info for navigation context.
date_info = client.dateinfos.get()
print(date_info.current_date, date_info.last_updated)
# Fetch batter HR predictions — filter by tab and category enum.
for outcome in client.outcomes.list(tab=Tab.BATTERS, category=CategoryId.HR, limit=3):
print(outcome.name, outcome.team, outcome.probability, outcome.book_price)
# Drill into pitcher outcomes for quality starts.
first_qs = client.outcomes.list(tab=Tab.PITCHERS, category=CategoryId.QUALITY_START, limit=1).first()
if first_qs:
print(first_qs.name, first_qs.pitcher, first_qs.probability)
# Handle typed errors when the site is unavailable.
try:
client.dateinfos.get(date="2020-01-01")
except OutcomesUnavailable as exc:
print(f"unavailable: {exc}")
print("exercised: outcomes.list / categories.list / dateinfos.get")
Get most likely MLB outcomes for a given date, optionally filtered by tab (batters/pitchers/teams/games) and/or specific category. Returns player/team names, probabilities, betting prices, matchup details, and more. Without filters, returns all 22 categories (~500 rows). Pagination is not supported; use limit to cap results.
| Param | Type | Description |
|---|---|---|
| tab | string | Filter by tab: 'batters', 'pitchers', 'teams', or 'games'. |
| date | string | Date in YYYY-MM-DD format. Defaults to today's date if omitted. |
| limit | integer | Maximum number of results to return. |
| category | string | Filter by category ID (1-22) or partial name match (e.g. 'HR', 'Quality Start'). Use get_categories endpoint for the full list of IDs and names. |
{
"type": "object",
"fields": {
"date": "string - Display date (e.g. 'June 11, 2026')",
"items": "array of outcome objects with category_id, category_name, team, time, game_id, name, entity_id, park, venue_id, score, opponent, vs_rating, pitcher, pitcher_id, probability, book_price",
"total": "integer - Number of items returned",
"last_updated": "string - Last update time (e.g. '12:57 AM')"
},
"sample": {
"data": {
"date": "June 11, 2026",
"items": [
{
"name": "Corey Seager",
"park": "KC",
"team": "TEX",
"time": null,
"score": null,
"game_id": "824101",
"pitcher": "Wacha",
"opponent": "KC",
"venue_id": "7",
"entity_id": "608369",
"vs_rating": "10",
"book_price": "+233",
"pitcher_id": "608379",
"category_id": "1",
"probability": "30.0%",
"category_name": "Hit a HR"
}
],
"total": 3,
"last_updated": "12:57 AM"
},
"status": "success"
}
}About the Ballpark Pal API
What the API Returns
The get_most_likely endpoint is the main data surface. For a given date it returns an array of Outcome objects, each containing category_id, category_name, team, game_id, name, entity_id, park, venue_id, score (probability), opponent, and more. The score field represents the simulation-derived probability for that outcome. The book_price field reflects the corresponding betting line. Results span all four tabs — batters, pitchers, teams, and games — and up to 22 distinct prediction categories such as Home Runs, Quality Starts, and team-level totals.
Filtering and Navigation
The tab parameter on get_most_likely narrows results to batters, pitchers, teams, or games. The category parameter accepts either a numeric category ID (1–22) or a partial name string like 'HR' or 'Quality Start'. To discover valid IDs and names before filtering, call get_categories, which returns a static list of all 22 categories with their tab groupings — no additional network call is made for this endpoint. The limit parameter caps the row count when you only need a subset.
Date Navigation
get_available_dates accepts an optional date parameter in YYYY-MM-DD format and returns the current_date display string, previous_date, next_date, and last_updated timestamp. This is useful for building date pickers or sequential polling loops without loading full outcome data. If no date is supplied, all three endpoints default to today's date. The last_updated field on both get_most_likely and get_available_dates shows the most recent time predictions were refreshed, typically intraday.
The Ballpark Pal API is a managed, monitored endpoint for ballparkpal.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when ballparkpal.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 ballparkpal.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?+
- Build a daily MLB betting dashboard that surfaces the highest-probability outcomes by category, sorted by the
scorefield - Filter
get_most_likelybytab=pitchersandcategory=Quality Startto track quality-start probability trends across a pitching staff - Compare
book_priceagainst simulationscoreto identify implied probability discrepancies for value betting research - Use
get_available_datesto programmatically paginate through historical prediction dates and build a time-series dataset - Populate a fantasy baseball lineup tool with batter HR and RBI probability scores from the batters tab
- Alert on high-probability team-level outcomes by filtering
tab=teamsand thresholding thevs_ratingfield - Cross-reference
parkandvenue_idfields with park factor data to contextualize simulation outputs by ballpark
| 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 Ballpark Pal have an official developer API?+
What does the `get_categories` endpoint return and when should I call it?+
get_categories returns the fixed list of all 22 prediction categories, each with an id, name, and tab field (batters, pitchers, teams, or games). Call it once to map category names to IDs, then use those IDs in the category filter on get_most_likely to narrow results precisely.How fresh is the prediction data, and how often does it update?+
last_updated field on get_most_likely and get_available_dates reflects the most recent refresh time, typically shown as a time-of-day string like '12:00 PM'. Updates are intraday but tied to when Ballpark Pal regenerates its simulations. There is no push or webhook mechanism — polling get_available_dates is the recommended way to detect refreshes without fetching the full outcomes table.Does the API expose individual player prop lines or historical simulation results beyond the current season?+
score probability and book_price line per outcome row. Historical dates can be navigated using get_available_dates, but deep historical archives or individual sportsbook prop breakdowns are not part of the current endpoints. You can fork this API on Parse and revise it to add endpoints targeting additional historical ranges or specific sportsbook prop data if the source exposes them.Can I retrieve outcomes for a specific pitcher or batter by player ID?+
entity_id field is included on each Outcome object in get_most_likely results, so you can filter client-side by that value after fetching a date's full results. The tab and category parameters help reduce the result set before filtering. You can fork this API on Parse and revise it to add a player-centric lookup endpoint if your use case requires it.