TeamWork Online Sports Jobs Scraper
Pricing
from $2.00 / 1,000 jobs
TeamWork Online Sports Jobs Scraper
Scrape every job on TeamWork Online, the sports industry's main board. Salary, categories, career level, expiry date and the full posting. HTTP-only, no browser, no proxy.
Pricing
from $2.00 / 1,000 jobs
Rating
0.0
(0)
Developer
Piquno
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
13 days ago
Last modified
Categories
Share
Scrape the whole of TeamWork Online — the job board the sports industry actually uses. Teams, leagues, arenas, agencies, college athletics, motorsports. ~8,900 live postings.
HTTP-only, no browser, no proxy. 26 flat fields per job, ready for CSV or Excel.
$2.00 per 1,000 jobs. No charge for empty rows.
Why this one
Nothing else on the Store covers this site. Four separate searches for TeamWork Online returned zero actors. The general job-board scrapers don't reach it, and the one nominally sports-labelled actor is Brazilian gym data.
That matters because sports hiring barely overlaps with the mainstream boards. A ticket-sales role at an NHL club or a partnerships job at a college athletics department is posted here and often nowhere else.
What you get that the listing page doesn't show
- Disclosed salary ranges, parsed into
salaryMin/salaryMax/salaryPeriod. These are not in the site's structured data — they only exist in the page HTML. - Job categories — "Corporate Partnerships | Corporate Sponsorship Sales | Premium/Suite Sales"
validThrough— an actual expiry date, which most job boards never publish. You can tell a live posting from a stale one.- The full posting text, including department, reports-to, FLSA status and qualifications.
applyUrl— the direct application link.
Two modes
Set fetchDetails: false for a fast, cheap sweep — one request per 100 jobs instead of one per job. Good for monitoring which organisations are hiring. Leave it on for salary, categories and full descriptions.
Input
{"vertical": "hockey-jobs","searchQuery": "ticket sales","maxJobs": 500,"fetchDetails": true,"withSalaryOnly": true}
Defaults: maxJobs is 100 with fetchDetails on — a fast sample that finishes in roughly 90 seconds. Raise maxJobs for a bulk extract; the whole board is around 8,900 jobs.
Or crawl the whole board by leaving vertical at its default. startUrls accepts TeamWork Online listing URLs directly, including ones with filters already applied on the site.
Monitoring the board
Set incremental: true with its own stateKey. Only postings not seen before are emitted, tagged changeType: "new" — so a daily watch on 8,900 jobs bills for the handful that are actually new.
Output
{"jobId": "2186711","jobTitle": "Manager, Partnerships & Premium","organizationName": "NorCal - Major League Volleyball","vertical": "other-sports-jobs","careerLevel": "Manager","jobCategories": "Corporate Partnerships | Corporate Sponsorship Sales | Premium/Suite Sales","locationCity": "San Ramon","locationState": "CA","locationCountry": "US","postalCode": "94583","workArrangement": "Hybrid","salaryMin": 62000,"salaryMax": 72000,"salaryPeriod": "year","datePosted": "2026-08-21T00:00:00.000Z","validThrough": "2026-09-30T00:00:00.000Z","applyUrl": "https://www.teamworkonline.com/employment_opportunities/2186711/applications/new","fieldsPopulated": 24}
Field fill rates
Measured on live pages. Published so you can judge completeness before you buy, not after.
| Field | Fill |
|---|---|
jobId, jobTitle, organizationName, jobUrl | 100% |
locationCity, locationState, careerLevel | 100% |
datePosted, validThrough, description | 100% with fetchDetails |
salaryMin / salaryMax | only where the employer disclosed pay — a minority of postings |
workArrangement | present when the employer stated it |
Nothing is inferred. A withheld salary stays null rather than being estimated.
Pricing
| Event | Price |
|---|---|
| Job | $0.002 ($2.00 / 1,000) |
| Actor start | $0.00005 |
A row is billed only if it has a job id, and it is billed before it is pushed — so you are never charged for a row you did not receive. Rows removed by your filters are never billed. The actor honours the maximum charge per run set in run options and stops fetching once that budget is spent.
Limitations — read before you buy
- Salary is often absent. Sports employers frequently withhold pay. Use
withSalaryOnlyif you need it, but expect the count to drop substantially. - Full details cost one request per job. 500 jobs with
fetchDetails: trueis ~505 requests, and the actor sustains about one job per second. Turn it off for broad sweeps — listing-only is one request per 100 jobs. - Filters that need detail data (
withSalaryOnly,postedWithinDays) requirefetchDetails: true. - The board is US-centric. Some international roles appear, but most postings are US-based.
- Format risk. Listings are parsed from server-rendered HTML and details from the page's structured data. If either changes, the actor logs it and stops rather than silently returning partial rows — and a failed detail fetch degrades to the listing row rather than dropping the job.
Running locally
npm installnpm test
Tests run against captured live pages in test/fixtures/ — no network required. They assert the things that actually break this scraper: 100 cards per page, page 2 disjoint from page 1, the pagination container being a <nav> rather than a <div>, and a posting with no salary not shifting every other field.