Bassmaster Tournament Results Scraper
Pricing
from $0.23 / 1,000 item extracteds
Bassmaster Tournament Results Scraper
Export completed Bassmaster tournament leaderboards with event details, angler ranks, catch weights, and published winnings.
Pricing
from $0.23 / 1,000 item extracteds
Rating
0.0
(0)
Developer
Automation Lab
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
21 hours ago
Last modified
Categories
Share
Export completed Bassmaster tournament results as structured, analysis-ready leaderboard rows. Select events by official URL, Bassmaster scoring-system ID, or year and series; receive event metadata, final angler rank, identity, fish count, catch weight, and published winnings in the default Apify dataset.
The Actor reads Bassmaster's public event and results endpoints directly. It does not require a login, browser, or proxy.
What can you do with this Actor?
- Export a completed tournament leaderboard to JSON, CSV, Excel, or XML.
- Build a historical table of angler finishes and catch weights.
- Track results for the Classic, Elite, Opens, College, B.A.S.S. Nation, High School, or another named series.
- Join stable tournament and angler IDs into a sports data warehouse.
- Schedule recurring runs and compare newly published or corrected results.
- Feed official source links and retrieval timestamps into an auditable reporting workflow.
Each dataset item represents one final angler or team placing in one tournament. Event data is repeated on each row so a downloaded table is immediately useful without a second join.
Who is this for?
Sports data analysts can compare finishes, weights, and payouts across events.
Fishing publishers and journalists can create tables and verify figures against an official source URL.
Fantasy and statistics developers can ingest stable tournament IDs, angler IDs, ranks, and normalized weights.
Automation teams can schedule yearly or series-specific exports without maintaining a custom WordPress/API integration.
This Actor is designed for completed official results. It is not a live Basstrakk tracker, prediction service, or video collector.
Why use this Bassmaster results scraper?
The result joins two public Bassmaster data surfaces. Final-results rows provide placing and published payout fields; leaderboard rows add fish count, hometown, and catch-weight detail. The Actor normalizes both into one typed record and preserves nulls when Bassmaster does not publish a value: a missing, blank, or non-numeric source value is null, never a fabricated 0.
Useful safeguards include:
- strict input and Bassmaster URL validation before any request;
- bounded request timeouts, retries only for transient failures (network, timeout, 429, 5xx);
- year discovery that scans every Bassmaster search page, not only the first 100 event pages;
- completed-event filtering and newest-first ordering for year discovery;
- deduplication by tournament ID that keeps event details from URL selections;
- global event and item limits that also stop unnecessary lookups;
- a
RUN_SUMMARYrecord showing events without published standings, skipped malformed rows, and why the run stopped; - charging only for rows saved to the dataset, within your run spending limit.
What data is extracted?
| Field | Meaning |
|---|---|
tournamentId | Bassmaster scoring-system tournament ID |
wordpressId | Official event-page ID, when resolved from a page or search |
eventName | Published tournament title |
eventStartDate, eventEndDate | Event dates with source timezone |
city, state | Published host location |
bodyOfWater | Published competition water |
series | Series text inferred from the official event slug |
rank | Final placing |
anglerId | Bassmaster competitor ID |
anglerName | Published angler or team name |
hometown | Published hometown |
fishCount | Accumulated fish count |
totalWeightOunces | Final weight normalized to ounces |
totalWeight | Bassmaster pounds-ounces display value |
prizeMoneyUsd | Published prize money |
cashBonusUsd | Published cash bonus |
merchandiseBonusUsd | Published merchandise bonus value |
totalWinningsUsd | Published combined winnings |
sourceUrl | Official event page or API URL |
retrievedAt | ISO 8601 extraction timestamp |
Money, weight, and fish-count fields remain null when the source does not publish them. A numeric zero means the source returned zero.
Each run also writes a RUN_SUMMARY record to the default key-value store:
{"selectedEvents": 3,"processedEvents": 3,"eventsWithoutPublishedResults": [],"eventsWithoutLeaderboardDetail": [],"malformedRowsSkipped": 0,"savedRows": 150,"stopReason": "completed","requests": 8,"retries": 0,"discoveryPages": 2}
stopReason is completed, maxItems, or spendingLimit. Use it to tell a complete export from one cut short by your limits.
How to get started
- Open the Actor input page.
- Keep the prefilled 2025 Bassmaster Classic URL for a first run, or replace it with another official tournament URL.
- Set Maximum tournaments and Maximum leaderboard rows.
- Click Start.
- Open the Dataset tab and choose the Tournament leaderboard view.
- Download the rows or connect the dataset to your integration.
A small URL-based run is the fastest way to verify the output contract before scheduling a larger year export.
Input options
Tournament URLs
tournamentUrls accepts official http/https URLs under bassmaster.com/tournament/<event>/. Event, results, or leaderboard variants resolve to the parent event slug, and repeated variants of the same event are looked up once.
{"tournamentUrls": ["https://www.bassmaster.com/tournament/2025-bassmaster-classic/"],"maxEvents": 1,"maxItems": 100}
Tournament IDs
tournamentIds accepts Bassmaster scoring-system IDs as integers. This route is useful when your database already contains source IDs. Event-page metadata is null because an ID alone does not identify a unique WordPress event page, unless the same event is also selected by URL or found by year discovery; then its event details are kept.
{"tournamentIds": [1573],"maxItems": 25}
Year and series discovery
Set year to discover completed events whose official start date is in that year. The Actor scans all Bassmaster search result pages (with a 10-page / 1,000 event-page safety limit that fails clearly rather than returning a partial scan), then orders matches newest first by end date. Add series for a case-insensitive event-title filter.
In the Apify Console form, the Classic URL is prefilled. Clear Tournament URLs when you only want year discovery; otherwise the Classic is selected first and counts toward Maximum tournaments.
{"year": 2025,"series": "elite","maxEvents": 3,"maxItems": 200}
Common series text includes classic, elite, open, college, nation, and high school. Matching is a substring of the event title or slug-derived series, not a guaranteed taxonomy. series without year is ignored with a warning.
Limits
maxEvents: 1–50, default 3.maxItems: 1–10,000, default 500.- The item limit applies across all tournaments.
- URL, ID, and discovery inputs can be combined in that priority order; duplicate events are processed once.
- When URLs and IDs already fill
maxEvents, the remaining URLs are not looked up and year discovery is skipped.
At least one URL, ID, or year is required.
Output example
A real row from the completed 2025 Bassmaster Classic has this shape:
{"tournamentId": 1573,"wordpressId": 1173856,"eventName": "2025 Bass Pro Shops Bassmaster Classic presented by Under Armour","eventStartDate": "2025-03-21T00:00:00-05:00","eventEndDate": "2025-03-23T23:59:59-05:00","city": "Fort Worth","state": "TX","bodyOfWater": "Lake Ray Roberts","series": "classic","rank": 1,"anglerId": 75191,"anglerName": "Easton Fothergill","hometown": "Grand Rapids , MN","fishCount": 15,"totalWeightOunces": 1231,"totalWeight": "76-15","prizeMoneyUsd": 300000,"cashBonusUsd": 8000,"merchandiseBonusUsd": 0,"totalWinningsUsd": 308000,"sourceUrl": "https://www.bassmaster.com/tournament/2025-bassmaster-classic/","retrievedAt": "2026-09-19T14:34:54.029Z"}
The default dataset view is suitable for spreadsheet export. Raw dataset items retain every documented field even when the compact table view hides some columns.
How much does it cost to export Bassmaster tournament results?
The Actor uses pay-per-event pricing:
- one Start charge per run;
- one Item processed charge for each leaderboard row saved.
The Start price is $0.015 per run. The item curve is:
| Apify tier | Price per saved leaderboard row |
|---|---|
| FREE | $0.000437 |
| BRONZE | $0.00038 |
| SILVER | $0.0002964 |
| GOLD | $0.000228 |
| PLATINUM | $0.000228 |
| DIAMOND | $0.000228 |
Failed, rejected, or duplicate source rows are not charged as items. If you set a maximum cost per run, the Actor saves only as many rows as that budget covers and records stopReason: "spendingLimit". The active prices also appear on the Actor's Apify pricing tab before a run starts.
As a planning formula:
run price = $0.015 + (saved leaderboard rows × your tier's Item extracted price)
At BRONZE, a 25-row test costs $0.0245 and a 200-row multi-event export costs $0.091. Runtime usage is included in pay-per-event pricing.
Scheduling and monitoring workflow
Create an Apify schedule with a year and series filter, then send each run's dataset to Google Sheets, a webhook, cloud storage, or your warehouse. Keep tournamentId, anglerId, rank, totalWeightOunces, totalWinningsUsd, and retrievedAt as comparison columns.
Bassmaster may correct results after an event. For change monitoring, upsert on (tournamentId, anglerId) and compare the remaining values rather than appending every scheduled snapshot as a new athlete.
Export and integration patterns
Spreadsheet reporting
Run one or several event URLs, open Dataset, and export CSV or Excel. Sort by tournamentId and rank.
Sports data warehouse
Use tournamentId as the event key and anglerId as the participant key. Retain source URL and retrieval time for provenance.
Webhook pipeline
Configure an Apify webhook for successful runs. Read the default dataset through defaultDatasetId in the run payload.
Make, Zapier, and n8n
Trigger this Actor through the Apify integration, then map dataset rows to a sheet, database, CMS, or notification step.
Run with the Apify API
Replace YOUR_TOKEN with an Apify API token.
cURL
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~bassmaster-tournament-leaderboards/runs?token=YOUR_TOKEN&waitForFinish=120" \-H "Content-Type: application/json" \-d '{"year":2025,"series":"elite","maxEvents":3,"maxItems":200}'
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/bassmaster-tournament-leaderboards').call({tournamentUrls: ['https://www.bassmaster.com/tournament/2025-bassmaster-classic/'],maxEvents: 1,maxItems: 100,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_TOKEN")run = client.actor("automation-lab/bassmaster-tournament-leaderboards").call(run_input={"tournamentIds": [1573], "maxItems": 25})items = client.dataset(run["defaultDatasetId"]).list_items().itemsprint(items)
Use with MCP and AI agents
Add this Actor to Claude Code:
claude mcp add --transport http apify \"https://mcp.apify.com?tools=automation-lab/bassmaster-tournament-leaderboards"
Claude Desktop, Cursor, and VS Code setup
Claude Desktop, Cursor, and VS Code clients that support remote MCP servers can use:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/bassmaster-tournament-leaderboards"}}}
Example prompts:
- “Export the completed 2025 Bassmaster Classic leaderboard and summarize the top ten weights.”
- “Collect three completed 2025 Elite events and compare winners by total ounces.”
- “Run tournament ID 1573 with a 25-row limit and return the dataset URL.”
Reliability and failure behavior
Requests have a 30-second timeout and up to three attempts for network errors, timeouts, HTTP 429, and transient 5xx responses. Other HTTP errors, such as 404, fail immediately. Events are processed sequentially to avoid unnecessary pressure on Bassmaster. Invalid input fails before any request with a message naming the field.
The run fails rather than returning an empty success when a required endpoint changes shape or a nonempty results list has no valid rows. Individual rows without a valid rank and angler name are skipped and counted in malformedRowsSkipped. A tournament whose final standings Bassmaster has not published is listed in eventsWithoutPublishedResults and saves no rows. A valid search with no completed matches succeeds with an empty dataset and an explanatory log message.
Limitations
- Only public Bassmaster data is supported.
- Year discovery depends on official event titles and metadata.
seriesis a text filter, not an exhaustive controlled list.- Direct tournament IDs do not include event-page metadata.
- Bassmaster Kayak Series events usually have no public scoring ID or published final standings on the results API this Actor reads, so they normally return no rows. The Actor does not convert or invent kayak length measurements.
- Old events may publish final placings and payouts without leaderboard detail; hometown and fish count are then
null. - Winnings fields can be null or zero according to the source.
- This Actor exports final standings, not live catches or predictions.
- Bassmaster's public endpoints are undocumented and can change.
- The Actor does not enrich anglers with private contact information.
Diagnostic privacy
Failed operations send sanitized diagnostic input, exceptions, and Actor/build/run IDs to our private GlitchTip service for repair. Secret fields and URL query strings are removed. Reports are retained for 30 days. No credentials or raw upstream responses are included.
Legality and responsible use
Bassmaster owns its site content and trademarks. Use exported public facts responsibly, follow applicable terms and laws, and avoid republishing protected editorial or media assets. The Actor does not bypass authentication or access private data.
When publishing a derived leaderboard, preserve source attribution and retrieval time. Review whether your use requires additional rights for commercial redistribution.
Troubleshooting
“Provide at least one tournament URL, ID, or year”
Add tournamentUrls, tournamentIds, or year. The Actor intentionally has no unbounded “scrape everything” mode.
An official URL reports no results-enabled tournament
Use the parent event URL under /tournament/<event-slug>/. Confirm that the event publishes a nonzero results/scoring ID and has completed results.
A year and series returns no rows
Try the year without series, then inspect official titles and use a shorter exact fragment. Future or incomplete events are excluded. Check eventsWithoutPublishedResults in RUN_SUMMARY for events that matched but have no published standings.
Year discovery returned the Classic instead of my series
The Console form prefills the 2025 Classic URL. Clear Tournament URLs when you only want year discovery.
Some payout or event fields are null
Null means the selected input route or Bassmaster source did not publish that value. Use an event URL or year discovery rather than ID-only input when event metadata is required.
The dataset stops partway through an event
Increase maxItems. The limit is global across all selected tournaments and is applied in rank order.
FAQ
Does it support the Bassmaster Classic?
Yes. Supply the official Classic event URL, scoring ID, or a year plus a sufficiently specific Classic title fragment.
Can I collect multiple tournaments in one run?
Yes. Combine URLs and IDs or use year discovery, then set maxEvents and maxItems for the required scope.
Are weights numeric?
Both forms are included: totalWeightOunces is numeric and totalWeight preserves Bassmaster's pounds-ounces display.
Are results live?
No. This product is intentionally optimized for completed final standings. The retrieval timestamp identifies when the snapshot was collected.
Do I need a proxy?
No. The Actor uses public JSON endpoints directly and has no automatic proxy fallback.
Can I schedule it?
Yes. Use Apify schedules and downstream integrations. Upsert stable IDs when you want change monitoring instead of duplicate snapshots.
Related Automation Lab Actors
For broader sports data work, see the NCAA College Sports Schedules & Scores API. It covers official NCAA games rather than fishing tournament leaderboards.
For event discovery rather than sports results, see the Ticketmaster Events Scraper.
These are complementary workflows; neither is a substitute for Bassmaster's per-angler final standings.