Back to list
Smarter-Poker

poker-schedule-scraper

by Smarter-Poker

Smarter-Poker-World-Hub

0🍴 0📅 Jan 26, 2026

SKILL.md


name: Poker Schedule Scraper description: Automated scraping of poker tournament schedules from major tour websites

Poker Schedule Scraper Skill

🎯 MISSION STATEMENT (LOCKED)

Goal: Create the MOST COMPREHENSIVE tournament database on the planet.

Product: PokerNearMe - A "Google-style" search engine for poker players to find:

  • 🎰 All cash games and tournaments near them
  • 🏢 777 venues nationwide (complete US coverage)

Search Capabilities:

  • By Distance (miles from user)
  • By State
  • By Dates (start date, end date, specific day)
  • By Buy-in Amount (min/max range)
  • By Tournament Type (NLH, PLO, Mixed, Bounty, etc.)
  • By Series Name (WSOP, WPT, MSPT, etc.)
  • By Game Type (Cash vs Tournament)

Display:

  • List view with all requested data
  • Optional Map View showing all matching venues/events

Data Quality Standard:

  • ✅ Complete yearly schedule for each tour
  • ✅ Every individual event within each series
  • ✅ Verified source URLs for daily updates
  • ✅ 777 venue enrichment (address, lat/lng, hours, games offered)

Overview

Efficiently scrape and populate the database with poker tournament schedules from major tours.

⚠️ PRIMARY SOURCE: POKER ATLAS

ALWAYS check Poker Atlas FIRST before visiting individual tour websites.

Poker Atlas URLs

Why Poker Atlas First?

  1. Aggregated data - All venues in one place
  2. Consistent format - Standardized table structure
  3. Real-time updates - Venues push updates here
  4. Complete info - Buy-ins, dates, guarantees, structure

Poker Atlas Venue Examples

VenuePoker Atlas URL
TCH Dallaspokeratlas.com/poker-room/texas-card-house-dallas/tournaments
Wynnpokeratlas.com/poker-room/wynn-las-vegas/tournaments
Borgatapokeratlas.com/poker-room/borgata-hotel-casino-spa/tournaments
Thunder Valleypokeratlas.com/poker-room/thunder-valley-casino-resort/tournaments

✅ VERIFIED SOURCE URLs (Successfully Scraped)

CRITICAL: Always save the EXACT URL where data was scraped to scrape_url field in database.

Poker Atlas (Primary - Use First)

Tour Official Sites (Secondary)

Venue Official Sites (Tertiary)

Aggregators (Backup/Verification)

SourceVerified Scrape URLNotes
Hendon Mobhttps://pokerdb.thehendonmob.com/venues/[venue-id]/festivalsUse for historical + upcoming
Card Playerhttps://www.cardplayer.com/poker-tournaments/[tournament-id]Good for schedule tables

Secondary Sources (Individual Tour Websites)

Database Schema

-- Series table (already exists)
CREATE TABLE poker_series (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  series_uid TEXT UNIQUE NOT NULL, -- e.g., 'wsopc-thunder-valley-2026'
  series_name TEXT NOT NULL,
  tour TEXT NOT NULL, -- 'WSOP Circuit', 'WPT', 'MSPT', etc.
  tier TEXT, -- 'Major', 'Regional', 'High Roller'
  venue_name TEXT,
  city TEXT,
  state TEXT,
  country TEXT DEFAULT 'USA',
  start_date DATE,
  end_date DATE,
  buy_in_min INTEGER,
  buy_in_max INTEGER,
  guarantee BIGINT,
  source TEXT, -- URL or source name
  events_scraped BOOLEAN DEFAULT FALSE,
  last_scraped TIMESTAMPTZ,
  scrape_url TEXT,
  scrape_status TEXT -- 'complete', 'series_only', 'pending', 'dates_announced'
);

-- Events table (already exists)
CREATE TABLE poker_events (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  event_uid TEXT UNIQUE NOT NULL, -- e.g., 'WSOPC-TV-2026-01'
  series_uid TEXT REFERENCES poker_series(series_uid),
  event_name TEXT NOT NULL,
  event_number INTEGER,
  event_type TEXT, -- 'main_event', 'side_event', 'satellite', 'high_roller'
  buy_in INTEGER NOT NULL,
  guarantee BIGINT,
  start_date DATE,
  start_time TIME,
  game_type TEXT, -- 'NLH', 'PLO', 'Mixed', 'Stud', etc.
  format TEXT, -- 'Single Day', 'Multi-Day', 'Multi-Flight', 'Turbo'
  venue_name TEXT,
  city TEXT,
  state TEXT,
  source TEXT,
  notes TEXT
);

Scraping Workflow

1. Series Discovery

// First scrape series-level data
const TOUR_URLS = {
  'WSOPC': 'https://www.wsop.com/tournaments/',
  'WPT': 'https://www.wpt.com/schedule/',
  'MSPT': 'https://msptpoker.com/schedule/',
  'RGPS': 'https://rungoodpokerseries.com/schedule/',
  'PGT': 'https://www.pgt.com/schedule/'
};

async function discoverSeries(tour) {
  // Navigate to tour schedule page
  // Extract: series name, dates, venue, city/state
  // Generate series_uid from tour + venue + year
  // Insert into poker_series with scrape_status = 'series_only'
}

2. Event Detail Scraping

async function scrapeEventDetails(seriesUid) {
  const series = await getSeries(seriesUid);
  
  // Navigate to series detail page
  // Extract each event row/card:
  //   - Event number, name, date, time
  //   - Buy-in, guarantee
  //   - Game type, format
  
  // Generate event_uid: TOUR-VENUE-YEAR-EVENT#
  // Insert into poker_events
  // Update poker_series.events_scraped = true
}

SQL Generation Pattern

-- Series INSERT template (ALWAYS include scrape_url!)
INSERT INTO poker_series (
  series_uid, series_name, tour, tier, venue_name, 
  city, state, start_date, end_date, 
  buy_in_min, buy_in_max, guarantee, source, 
  scrape_url, events_scraped, scrape_status
) VALUES (
  '[tour]-[venue-slug]-[year]',
  '[Full Series Name]',
  '[Tour Name]',
  '[Major/Regional/High Roller]',
  '[Venue Name]',
  '[City]', '[ST]',
  '[YYYY-MM-DD]', '[YYYY-MM-DD]',
  [min_buyin], [max_buyin], [guarantee],
  '[source.com]',
  '[EXACT URL WHERE DATA WAS SCRAPED]', -- ⚠️ REQUIRED: Save exact source URL
  [true/false], '[complete/series_only/pending]'
) ON CONFLICT (series_uid) DO UPDATE SET 
  scrape_url = EXCLUDED.scrape_url,
  last_scraped = NOW();

-- Events INSERT template
INSERT INTO poker_events (
  id, event_uid, series_uid, event_name, event_number,
  event_type, buy_in, guarantee, start_date,
  game_type, format, venue_name, city, state, source
) VALUES (
  gen_random_uuid(),
  '[TOUR]-[VENUE]-[YEAR]-[##]',
  '[series_uid]',
  '[Event Name]',
  [event_number],
  '[main_event/side_event/satellite]',
  [buyin], [guarantee],
  '[YYYY-MM-DD]',
  '[NLH/PLO/Mixed]',
  '[Multi-Day/Single Day]',
  '[Venue]', '[City]', '[ST]', '[source]'
) ON CONFLICT (event_uid) DO NOTHING;

🎯 THE 55 CANONICAL TOURNAMENT SERIES (Master Checklist)

CRITICAL: Complete ALL 55 series before moving to venue-level scraping.

Tier 1: National/Major (7 Series)

#SeriesTourStatus
1WSOP (Summer Series)WSOP✅ Series dates confirmed (May 26 - Jul 15)
2WSOP CircuitWSOP✅ 18 stops, 7 w/events uploaded
3WSOP Online (U.S.)WSOP🚫 N/A - Online excluded
4WPT Main TourWPT✅ Lucky Hearts complete
5WPT PrimeWPT✅ Jan-Apr mapped
6PokerStars NAPTPokerStars❌ NOT SCRAPED
7PokerGO Tour (PGT)PokerGO✅ Jan-Mar mapped

Tier 2: Large Regional (10 Series)

#SeriesTourStatus
8MSPTMSPT✅ 42 series, 120+ events COMPLETE
9RGPSRunGood⚠️ 13 stops mapped, needs events
10SHRPO (Hollywood)Seminole✅ Jul/Aug mapped
11Seminole ShowdownSeminole✅ Apr confirmed
12Seminole ClassicSeminole✅ Escalator X complete
13Borgata Winter Poker OpenBorgata✅ Jan 2026 complete
14Borgata Spring Poker OpenBorgata⚠️ Apr/May mapped, needs events
15Bar Poker Open (BPO)BPO❌ NOT SCRAPED
16WPT Lucky Hearts (LHPO)WPT✅ 58 events complete
17Maryland Live Open (MAPO)Maryland Live❌ NOT SCRAPED
18Parx Big StaxParx Casino❌ NOT SCRAPED

Tier 3: Las Vegas Majors (9 Series)

#SeriesVenueStatus
19Wynn MillionsWynn✅ Feb/Mar mapped ($7M GTD)
20Wynn Summer ClassicWynn⚠️ May/Jul series only
21Venetian DeepStack (NYE)Venetian✅ Complete
22Venetian DeepStack (Spring)Venetian✅ Complete
23ARIA Poker ClassicARIA❌ NOT SCRAPED
24U.S. Poker OpenPokerGO❌ NOT SCRAPED
25Poker MastersPokerGO❌ NOT SCRAPED
26Super High Roller BowlPokerGO❌ NOT SCRAPED
27PokerGO CupPokerGO✅ Mar 1-15 mapped

Tier 4: State Recurring (25 Series)

#SeriesStateStatus
28L.A. Poker Classic (LAPC)CA✅ 68 events complete
29Bay 101 Shooting StarCA❌ NOT SCRAPED
30Gardens Poker ChampionshipCA❌ NOT SCRAPED
31Bicycle Casino SeriesCA❌ NOT SCRAPED
32Thunder Valley CircuitCA⚠️ WSOPC stop only
33TCH TrailblazerTX✅ Houston/Dallas/Austin mapped
34TCH Poker ChampionshipTX⚠️ Big One only
35Champions Club SeriesTX❌ NOT SCRAPED
36Texas Poker OpenTX❌ NOT SCRAPED
37Bestbet BlizzardFL✅ Feb complete
38Bestbet Poker SeriesFL⚠️ Winter StAC only
39Arizona State ChampionshipAZ✅ Aug 14-20 mapped
40MSPT Diamond (Talking Stick)AZ✅ Jan complete
41FireKeepers SeriesMI❌ NOT SCRAPED
42Running Aces SeriesMN❌ NOT SCRAPED
43Potawatomi Poker ClassicWI⚠️ MSPT stop only
44Turning Stone SeriesNY❌ NOT SCRAPED
45Mohegan Sun SeriesCT❌ NOT SCRAPED
46Beau Rivage HeaterMS❌ NOT SCRAPED
47Cherokee Poker SeriesNC⚠️ WSOPC stop only

Tier 5: Brand-Based (4 Series)

#SeriesBrandStatus
48Caesars Poker SeriesCaesars❌ NOT SCRAPED
49MGM Poker SeriesMGM❌ NOT SCRAPED
50Hard Rock Poker SeriesHard Rock❌ NOT SCRAPED
51Horseshoe Poker SeriesHorseshoe⚠️ WSOPC only

Additional Canonical (4 Series)

#SeriesTourStatus
52WSOP EuropeWSOP✅ Prague Mar 31-Apr 12
53WPT World ChampionshipWPT⚠️ Dec TBD
54Roughrider Poker TourRegional❌ NOT SCRAPED
55Free Poker Network (FPN)Amateur❌ NOT SCRAPED

📊 SCRAPE STATUS SUMMARY

StatusCountSeries
✅ Complete22WSOP, WSOPC, WPT, MSPT, Seminole, Borgata Winter, Venetian, LAPC, etc.
⚠️ Partial11RGPS, Wynn Summer, Cherokee, Potawatomi, etc.
❌ NOT SCRAPED22See list below

Priority Scraping Order

1. WSOPC (Jan-Dec) - 18 stops
2. WPT (year-round) - 15 stops  
3. MSPT (year-round) - 24 stops
4. Major Vegas (Wynn, Venetian, WSOP Summer)
5. Florida (Seminole, bestbet)
6. California (LAPC, Thunder Valley)
7. Regional (RGPS, state championships)
8. High Roller (PGT, Aria)

Quick Commands

# Verify series counts
SELECT tour, COUNT(*) FROM poker_series GROUP BY tour ORDER BY count DESC;

# Find series needing event scraping
SELECT series_uid, series_name, start_date 
FROM poker_series 
WHERE events_scraped = FALSE 
  AND start_date > CURRENT_DATE
ORDER BY start_date;

# Count total events
SELECT COUNT(*) FROM poker_events;

Typical Scrape Output

When scraping, generate SQL blocks like:

-- [TOUR NAME] [YEAR] - [VENUE]
-- Source: [url]
-- Scraped: [date]

INSERT INTO poker_series (...) VALUES (...);
INSERT INTO poker_events (...) VALUES (...), (...), ...;

Daily/Weekly Automated Scraper

Existing Infrastructure

Located at: scripts/daily-tournament-scraper.js

GitHub Actions Workflow: .github/workflows/daily-scraper.yml

  • Runs at 6am UTC (midnight CST) daily
  • Can be manually triggered via GitHub Actions

What It Does

  1. Queries poker_series for series where events_scraped = FALSE
  2. Checks if last_scraped is older than 7 days
  3. Only processes future series (start_date >= TODAY)
  4. Updates scrape_status and last_scraped timestamps

Tour Configurations

const TOUR_SCRAPERS = {
  'WSOP Circuit': { baseUrl: 'wsop.com/tournaments/', checkInterval: 7 },
  'WPT Main Tour': { baseUrl: 'worldpokertour.com/schedule/', checkInterval: 7 },
  'WPT Prime': { baseUrl: 'worldpokertour.com/schedule/', checkInterval: 7 },
  'RunGood Poker Series': { baseUrl: 'rungood.com/schedule/', checkInterval: 14 },
  'MSPT': { baseUrl: 'msptpoker.com/schedule/', checkInterval: 7 },
  'Venetian Poker Room': { baseUrl: 'venetianlasvegas.com/poker', checkInterval: 14 },
};

Add New Tour to Scraper

Edit scripts/daily-tournament-scraper.js:

'NEW_TOUR': {
  baseUrl: 'https://example.com/schedule/',
  urlPattern: (seriesName) => `https://example.com/${slug}/`,
  checkInterval: 7, // days between checks
},

Required Secrets (GitHub Actions)

  • NEXT_PUBLIC_SUPABASE_URL
  • SUPABASE_SERVICE_ROLE_KEY

Run Manually

cd hub-vanguard
node scripts/daily-tournament-scraper.js

Venue Monitoring List

The scraper should check these sources weekly:

VenueCheck URLPriority
Wynnwynnlasvegas.com/pokerHigh
Venetianvenetianlasvegas.com/pokerHigh
Borgataborgata.mgmresorts.com/pokerHigh
Seminole Hollywoodseminolehardrockpokeropen.comHigh
Seminole Tampashrtpoker.comMedium
Commerce (LAPC)commercecasino.com/pokerMedium
bestbet Jaxbestbetjax.com/pokerMedium
Talking Sticktalkingstickresort.com/pokerMedium
Thunder Valleythundervalleyresort.com/pokerMedium

Notes

  • Always use ON CONFLICT DO NOTHING to prevent duplicates
  • Generate deterministic series_uid and event_uid for idempotency
  • Include source URL for verification
  • Mark scrape_status accurately for tracking

Score

Total Score

50/100

Based on repository quality metrics

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

0/10
説明文

100文字以上の説明がある

0/10
人気

GitHub Stars 100以上

0/15
最近の活動

3ヶ月以内に更新がある

0/10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

0/5

Reviews

💬

Reviews coming soon