# Pickswise Scraper - Expert Picks, Parlays & Odds (`parseforge/pickswise-scraper`) Actor

Scrape Pickswise expert betting picks with written analysis and confidence ratings, parlays, game odds boards, news, promo codes, sportsbooks, handicappers and teams. Up to 30 sportsbooks quoted per pick with bet-slip deeplinks, plus computed line-shopping analytics.

- **URL**: https://apify.com/parseforge/pickswise-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Other, AI, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

[![ParseForge](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner.jpg)](https://apify.com/parseforge?fpr=vmoqkp)

### Pickswise Scraper - Expert Picks, Parlays & Odds

**Scrape Pickswise's expert betting picks, best bets and parlays.** Every pick comes with the handicapper's written case, a 1-to-5 confidence rating, the market and price, and up to 30 sportsbooks quoting the same selection with direct bet-slip links. Covers NFL, NBA, MLB, NHL, college football and soccer picks, plus game odds with true **no-vig fair lines**, news, promo codes, the sportsbook directory and 42 handicapper profiles. No login, no API key, no proxy. Export to CSV, JSON, Excel, or XML.

Most odds scrapers give you numbers. Pickswise publishes numbers **and** the argument behind them — a named handicapper, a rating, and 250 words of reasoning per pick. This reads both, from the site's own public API, and hands you the pick and the price grid in a single row.

| Who uses it | What they scrape Pickswise for |
|---|---|
| Betting affiliates and media | Daily picks feeds, promo codes and book ratings for content pages |
| Tipster and tracking apps | Named picks with ratings and timestamps to build track records |
| Bettors and handicappers | Line shopping across every book quoting the pick, with deeplinks |
| Quants and modellers | De-vigged fair probabilities and book hold as model inputs |
| Content and SEO teams | 31,268 articles with author, league and related-game metadata |

### What it does

This Actor reads the public Pickswise API and returns eight collections. Every row carries a `rowType`, so a mixed run splits cleanly.

- 🎯 **Expert picks** — the selection, its market and price, a 1-to-5 confidence rating, tags such as *Best Bet* or *Value Pick*, a short summary, the handicapper who made it, and the full game context.
- 🧾 **Parlays** — multi-leg tickets with every leg nested inside, plus the combined price across the books that quoted the whole ticket (29 books on the sample ticket).
- 💰 **Game odds** — upcoming games with the full market board: moneyline, spread, totals and team totals, each restated as American, decimal, implied probability and profit per $100.
- 🏦 **Up to 30 sportsbooks per pick** — each with its own price, its own spread or total, when it last moved, and a direct bet-slip deeplink where the book publishes one.
- 🧮 **A no-vig calculator built into every game row** — both sides of a market are published, so the overround is observable: book hold, vig-free (de-vigged) fair probabilities, fair American lines, implied probability, and a genuine arbitrage check with the stake split. No spreadsheet, no separate vig calculator.
- 📰 **News** — 31,268 articles with author, league, related games, reading time and full body text.
- 🎁 **Promo codes** — 88 sportsbook and casino offers with code, value, offer type and full terms, filterable by US state.
- 📇 **Directories** — 63 sportsbooks with ratings and sign-up links, 42 handicappers with bios, and 5,677 teams and competitors.

Results export to CSV, JSON, Excel, or XML, or stream from the API.

### Collections covered

| Collection | Rows available | Server-side filters | Optional blocks |
|---|---|---|---|
| Expert picks | The live board, 20 at a time | League | Price grid, line shopping, full analysis |
| Parlays | The live parlay board | League | Price grid, line shopping, full analysis |
| Game odds | 3,554 events; 119 upcoming carry prices | League, upcoming | Player props, de-vig |
| News | 31,268 articles | League | Article body |
| Promo codes | 88 offers | State, operator type | — |
| Sportsbooks | 63 books and casinos | Operator type | — |
| Handicappers | 42 profiles | — | — |
| Teams | 5,677 teams and competitors | — | — |

Leagues covered: NFL, NBA, MLB, NHL, MLS, College Football, College Basketball, World Cup, Champions League, Europa League, Premier League, ATP Tennis, UFC and PGA Tour.

**A note on the picks board.** Pickswise publishes a rolling board of current picks rather than an archive, and the API serves 20 at a time regardless of what you ask for — `limit` and `skip` are accepted and ignored on that endpoint, which we measured rather than assumed. Selecting several leagues asks the API once per league and widens the board that way. If you want a growing history, schedule the Actor daily and let the dataset accumulate.

### What you can do with Pickswise data

**🥇 Shop the line on a pick you already trust.**

Every pick carries the books quoting it. Measured across one live board: 29.9 books listed per pick but only **8.6 actually pricing it** — the rest are placeholders with no number, and `booksQuoting` counts only the real ones. Taking the best price instead of the median was worth a mean of **293 basis points**, and up to 1,509 bps on the widest market. Novig had the best price on 13 of 18 picks; DraftKings and FanDuel took two each.

**🧮 Remove the vig, properly.**

The game-odds collection publishes both sides of each market, so the no-vig calculation is real arithmetic and not an estimate. Across 101 upcoming games: **mean moneyline hold 4.44%**, ranging from 1.46% to 7.99%. Totals ran slightly richer at 4.70% over 69 games. The block hands back de-vigged fair probabilities that sum to 1 and the fair American line for each side — the numbers a vig calculator gives you, already computed on every game, plus an arbitrage check that flags an overround below 1.

**🎯 Pull today's best bets by sport.**

*Best Bet* is one of the 39 tags Pickswise publishes, and confidence is a 1-to-5 rating on every pick. Filter to rating 5, or to the Best Bet tag, and you have the day's strongest plays across NFL, NBA, MLB, NHL, college football and soccer in a single run.

**📈 Build a tipster track record.**

Each pick names its handicapper, its rating and its creation timestamp. Schedule a daily run, join on `id`, and settle against results to build a verified record per author — the thing tipster-tracking products are built on and that Pickswise does not publish itself.

**🎁 Run an affiliate offers page.**

The promo-codes collection returns 88 live offers with code, value, offer type and the full terms text, filtered by US state server-side — 28 offers are live in New Jersey, 32 are casino rather than sportsbook. Sign-up links come straight from the row.

**🔍 Screen without paying for the block.**

Filters run against the complete data, before the optional blocks are trimmed off. You can demand five quoting books, or only picks where shopping actually gains you something, without buying the price grid in your output.

### Why choose this scraper

- **The picks, not just the prices.** The written case, the rating and the named handicapper come with every row. Odds aggregators do not carry any of it.
- **30 books per pick with deeplinks.** Measured 72 live bet-slip links across 598 quotes — you can hand a user a link that opens the bet already loaded.
- **De-vig that is actually derived.** On game odds both sides are present, so hold and fair probability are computed, not guessed. We say so plainly on picks, where only one side exists and no honest de-vig is possible.
- **Eight collections, one Actor.** Picks, parlays, odds, news, promos, books, handicappers and teams — instead of eight separate subscriptions.
- **No proxy, no browser, no key.** The API answered 30 concurrent requests with no rate limiting and no challenge. Runs are seconds, not minutes.
- **Measured, not assumed.** Every filter in the input was tested against the live API. The ones the site accepts but silently ignores are handled by this Actor instead, and the README says which is which.

### How it compares

There is **no other Pickswise scraper on the Apify Store** — we checked the catalogue and the search index before building this. The nearest comparables are general odds aggregators, which carry prices but no picks, no ratings and no analyst copy.

| | This Actor | Odds aggregators |
|---|---|---|
| Expert picks with written analysis | ✅ 250 words per pick | ❌ |
| Confidence rating per pick | ✅ 1–5 with label | ❌ |
| Named handicapper and bio | ✅ 42 profiles | ❌ |
| Parlays with combined book prices | ✅ 29 books | Rare |
| Books quoting a selection | ✅ up to 30, with deeplinks | Typically 5–10 |
| True two-way de-vig | ✅ hold, fair line, arbitrage | Sometimes |
| Promo codes by US state | ✅ 88 offers | ❌ |
| Editorial archive | ✅ 31,268 articles | ❌ |

### What a pick row looks like

```json
{
  "rowType": "pick",
  "id": 1855,
  "rating": 3,
  "confidence": "Solid",
  "status": "Published",
  "isPinned": false,
  "selection": "Moneyline - Tampa Bay Rays",
  "market": {
    "id": 54084212,
    "title": "Moneyline - Tampa Bay Rays",
    "type": "moneyline",
    "line": null,
    "isPlayerMarket": false,
    "consensusOdds": "-133",
    "american": -133,
    "decimal": 1.7519,
    "impliedProbability": 0.570815,
    "payoutPer100": 75.19
  },
  "tags": ["Money Line Pick"],
  "summary": "The Tigers have lost 9 of their last 10 games and are seeing their playoff hopes slip away right before their eyes...",
  "author": {
    "id": 11,
    "name": "Connor Grootenhuis",
    "slug": "connor-grootenhuis",
    "headline": "NHL & MLB Handicapper",
    "bio": "Connor Grootenhuis has been in the sports betting content space for over six years...",
    "location": "Indianapolis, IN",
    "twitter": "https://x.com/CG_cashes",
    "profileUrl": "https://www.pickswise.com/handicappers/connor-grootenhuis"
  },
  "event": {
    "id": 5195238,
    "title": "Detroit Tigers vs Tampa Bay Rays - MLB - August 25, 2026",
    "startsAt": "2026-08-25T22:40:00Z",
    "status": "upcoming",
    "sport": "Baseball",
    "league": { "shortName": "MLB", "longName": "Major League Baseball", "countryCode": "US" },
    "homeTeam": { "abbr": "DET", "name": "Tigers", "fullName": "Detroit Tigers", "primaryColor": "#0C2340" },
    "awayTeam": { "abbr": "TB", "name": "Rays", "fullName": "Tampa Bay Rays" },
    "venue": { "name": "Comerica Park", "city": "Frisco", "regionCode": "TX", "capacity": 6500 },
    "url": "https://www.pickswise.com/mlb/games/detroit-tigers-tampa-bay-rays-mlb-2026-08-25-1840"
  },
  "booksListed": 30,
  "booksQuoting": 10,
  "createdAt": "2026-08-25T13:02:11Z",
  "url": "https://www.pickswise.com/mlb/games/detroit-tigers-tampa-bay-rays-mlb-2026-08-25-1840/picks",
  "scrapedAt": "2026-08-25T20:01:52.318Z"
}
```

With **Add the sportsbook price grid** on, each row also carries `bookLines`:

```json
"bookLines": [
  {
    "bookmakerId": 56,
    "bookmaker": "Novig",
    "type": "sportsbook",
    "rating": 4.6,
    "odds": "-122",
    "american": -122,
    "decimal": 1.8197,
    "impliedProbability": 0.54955,
    "payoutPer100": 81.97,
    "spread": null,
    "overUnder": null,
    "isAvailable": true,
    "lastUpdatedAt": "2026-08-25T20:01:44.325Z",
    "deeplink": "https://novig.com/events/01a034cd-2398-73e0-b0d7-de59c7eeb758/sportsgameodds"
  }
]
```

With **Add line-shopping analytics** on, a pick row carries `lineShopping`:

```json
"lineShopping": {
  "booksQuoting": 10,
  "bestBook": "Novig",
  "bestOdds": "-122",
  "bestDecimal": 1.8197,
  "bestDeeplink": "https://novig.com/events/01a034cd-.../sportsgameodds",
  "worstBook": "BetMGM",
  "worstOdds": "-145",
  "worstDecimal": 1.6897,
  "medianDecimal": 1.7845,
  "shoppingGainBps": 769,
  "shoppingGainVsMedianBps": 198,
  "consensusImpliedProbability": 0.563741,
  "bestImpliedProbability": 0.54955,
  "priceSpreadCents": 23,
  "marketWidthPct": 7.285
}
```

…and a **game-odds** row carries the real two-way de-vig instead:

```json
"deVig": {
  "moneyline": {
    "sideA": "Moneyline - Pittsburgh Steelers",
    "sideB": "Moneyline - Buffalo Bills",
    "oddsA": "+125",
    "oddsB": "-152",
    "overround": 1.047619,
    "holdPct": 4.545,
    "fairProbabilityA": 0.424242,
    "fairProbabilityB": 0.575758,
    "fairAmericanA": 136,
    "fairAmericanB": -136,
    "isArbitrage": false,
    "arbitrageProfitPct": null,
    "stakeSplitPct": null
  },
  "total": { "sideA": "Over 35.5", "sideB": "Under 35.5", "holdPct": 4.751, "fairProbabilityA": 0.498926 }
}
```

### Configure the run

**What to scrape** — pick any of the eight collections. When you select several, the row budget is split evenly between them, and a collection that cannot fill its share passes the remainder on.

**Narrow the run**

| Filter | What it does |
|---|---|
| Leagues | 14 leagues. **Filtered by the API itself**, so it makes the run cheaper, not just shorter |
| Sports | 9 sports. Applied here — the API accepts `sport` and ignores it |
| Upcoming games only | Game odds carry prices only on upcoming events; off gives a bare fixture list |
| Market types | Moneyline, spread, game total, team total, player prop, other |
| Pick tags | 39 tags including Best Bet, Value Pick, Underdog, Player Prop Pick, Parlay Leg |
| Handicappers | By slug or name |
| Teams | Any part of the team name |
| Sportsbooks | Restrict the price grid to named books |
| Min / max rating | The 1-to-5 confidence scale. 5 keeps Best Bets only |
| Min / max odds | American odds bounds. `minOdds: 100` keeps underdogs only |
| Min books quoting | Counts books that actually priced it, not placeholders |
| Starts after / before | Game start-time window |
| Search text | Matches selection, game, write-up, author or article body |
| Only games priced up | Drops games with an empty board |
| Only pinned picks | The picks Pickswise pinned to the top |
| Only picks worth shopping | Best book beats the median book |
| Promo states / operator types | **Both filtered by the API**: NJ returns 28 of 88; casino returns 32 |

**Extra data** — all five off by default: the sportsbook price grid, line-shopping analytics, the full written analysis, player props, and article bodies.

### Pricing

Pay-per-event. You are billed per row written, plus a small charge for each listing page fetched and a $0.03 run-start fee. Filtered-out rows cost nothing.

| Event | Price | When it fires |
|---|---|---|
| Run start | $0.030 | Once per run |
| Listing page scanned | $0.010 | Each listing page fetched — one per league, per collection, per page |
| Expert pick | $0.007 | Each pick row written |
| Game with odds board | $0.007 | Each game row written |
| Parlay | $0.020 | Each parlay row, with all legs nested |
| News article | $0.005 | Each article row |
| Promo code | $0.004 | Each offer row |
| Sportsbook profile | $0.004 | Each book row |
| Handicapper profile | $0.004 | Each author row |
| Team or competitor | $0.002 | Each team row |
| Sportsbook price grid | $0.006 | Only with **Add the sportsbook price grid** on, per row that has one |
| Line-shopping analytics | $0.004 | Only with **Add line-shopping analytics** on, per row |
| Full written analysis | $0.003 | Only with **Add the full written analysis** on, per row |
| Player props | $0.004 | Only with **Add player props** on, per game that has any |
| Article body | $0.003 | Only with **Add the article body** on, per article |

| Pick rows collected | Approximate cost |
|---|---|
| 100 | $0.79 |
| 1,000 | $7.13 |
| 10,000 | $70.83 |

The five optional events are off by default. A run that leaves them off pays only the run-start fee, one scan per listing page, and the per-row rate.

**Why $7 per 1,000 and not $1.** Measured on the platform, this Actor's own cost per 1,000 rows is a fraction of a cent — it is HTTP-only, with no proxy and no browser, and a 400-row run with every block enabled finished in 13.3 seconds. We price on what the row is worth rather than what it costs us. There is no competing Pickswise scraper to undercut, and a pick row here carries things an odds feed does not sell at any price: a named handicapper, a rating, 250 words of analysis, and 30 books quoting the same selection with bet-slip links.

### Free users

Free-plan runs return up to 25 rows as a preview. [Upgrade your Apify plan](https://console.apify.com/sign-up?fpr=vmoqkp) to collect the full board.

### Run it

1. [Create a free Apify account with $5 in credit](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the [Pickswise Scraper](https://apify.com/parseforge/pickswise-scraper?fpr=vmoqkp).
3. Choose your collections, add any filters, and click **Start**.
4. Export the results as CSV, Excel, JSON, or XML from the **Dataset** tab.

Run it programmatically through the [Apify API](https://docs.apify.com/api/v2) or the [ApifyClient](https://docs.apify.com/api/client/js) for JavaScript and Python.

### Use with AI agents (MCP)

Give an AI agent live access to expert betting picks through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/pickswise-scraper"
```

Then prompt it in plain language:

- *"What are today's Best Bet picks on Pickswise, and which book has the best price on each?"*
- *"Pull every MLB pick rated 4 or higher and tell me where the line shopping is worth most."*
- *"Which sportsbook has the lowest hold on tonight's NFL moneylines?"*

### Troubleshooting

**A run returned fewer picks than I expected.** The picks board is small by design — Pickswise publishes what its handicappers put out that day, which was 20 across all leagues when this was written, and 0 for leagues out of season. `picks/count-by-league` on the site shows the same numbers. Nothing is being dropped.

**I selected eight collections and got few rows from each.** The row budget is split evenly across the collections you selected. Raise **Maximum rows** or run fewer collections at a time.

**Game odds came back with no prices.** Prices ride only on upcoming events. Leave **Upcoming games only** on. Of 119 upcoming events, 105 carried a board.

**`booksQuoting` is lower than `booksListed` and than the number of rows in `bookLines`.** That is correct and deliberate. Pickswise lists every book it tracks, including ones carrying no number on that market — measured at 29.9 listed against 8.6 actually pricing it. `booksListed` is the full grid; `booksQuoting` counts only books with a live price that can be attributed to a named book. A price with no bookmaker attached, which is 18 of every 598 quotes, is excluded from both `booksQuoting` and the analytics, because you cannot go and take a price you cannot trace to a book. The **Min books quoting** filter uses the same strict count.

**No `lineShopping` on some picks.** A pick nobody has priced yet has nothing to shop. The field is null rather than invented.

**I want a fair line on a pick, not just on game odds.** Not possible honestly. A no-vig price needs both sides of the market; Pickswise publishes the side the handicapper took. Any "fair" number derived from one side alone collapses back into the best book's own implied probability. The real de-vig is on the game-odds collection, where both sides exist.

**Scores are missing.** The API serves forward-looking events only — `homeScore` and `awayScore` were null in 100 of 100 rows sampled — so this Actor does not carry them rather than shipping a column that is always empty.

### FAQ

**Is this legal?** The Actor reads a public, unauthenticated JSON API that the Pickswise website itself calls from the browser. No login is used and nothing is bypassed. As with any scraping, you are responsible for how you use the output — check Pickswise's terms, and note their robots.txt disallows several named AI crawlers while allowing general access.

**Do I need a proxy?** No. The API answered 30 concurrent requests in 754 ms with no rate-limit headers, no 429s and no challenge. A proxy input exists only if you want to pin the run to a region.

**How fresh are the odds?** Each book quote carries its own `lastUpdatedAt`. The API sits behind a five-minute CDN cache, so schedule no tighter than that.

**Can I get historical picks?** Not from the API — it serves the current board. Schedule a daily run and the dataset builds the archive for you.

**How many teams are there really?** 5,677 rows, and the collection mixes clubs with individual competitors: tennis players and golfers appear alongside NFL franchises, because Pickswise models each side of a matchup as a "team".

**Does the league filter work on every collection?** On picks, parlays, game odds and news, yes — it is a real API filter. On teams it is not: the API accepts `league` there and returns all 5,677 rows regardless, so this Actor does not offer it as a team filter.

### Related actors

- [RotoWire Odds Scraper](https://apify.com/parseforge/rotowire-scraper?fpr=vmoqkp) — nine books per game across 10 sports, with props and futures
- [Action Network Scraper](https://apify.com/parseforge/action-network-scraper?fpr=vmoqkp) — public betting percentages and sharp money
- [Sportsbook Review Scraper](https://apify.com/parseforge/sportsbook-review-scraper?fpr=vmoqkp) — consensus lines and book comparison
- [Bovada Scraper](https://apify.com/parseforge/bovada-scraper?fpr=vmoqkp) — full Bovada board including futures
- [Browse all ParseForge actors](https://apify.com/parseforge?fpr=vmoqkp)

# Actor input Schema

## `datasets` (type: `array`):

Which Pickswise collections to return. Each one is a separate row type, and every row carries a rowType field so mixed runs stay easy to split. Expert picks are the flagship: each one is a handicapper's bet with a written case, a confidence rating and up to 30 sportsbooks quoting the same selection.

## `leagues` (type: `array`):

Filter by league. This one is a real server-side filter, so narrowing it here makes the run cheaper and faster rather than just trimming the output. Leave empty for every league.

## `sports` (type: `array`):

Filter by sport. Applied by this Actor: the API accepts a sport parameter and silently ignores it.

## `upcomingOnly` (type: `boolean`):

For the game-odds collection. Pickswise attaches the odds board only to upcoming events — turn this off and you get the wider event list with no prices on it. Leave it on unless you want a bare fixture list.

## `marketTypes` (type: `array`):

Keep only these kinds of market. Pickswise has no market-type field, so this Actor classifies each market from its title.

## `tags` (type: `array`):

Keep only picks carrying one of these tags, matched loosely. Pickswise publishes 39, including Best Bet, Value Pick, Money Line Pick, Point Spread Pick, Player Prop Pick, Underdog, Parlay Leg and Future.

## `authors` (type: `array`):

Keep only picks by these handicappers, by slug or by name, for example connor-grootenhuis. There are 42 in the directory; scrape the handicappers collection to list them.

## `teams` (type: `array`):

Keep only rows involving these teams, matched on any part of the name, for example Yankees or Buffalo Bills.

## `bookmakers` (type: `array`):

Restrict the bookmaker price grid to these books, for example DraftKings or FanDuel. Leave empty for every book Pickswise quotes — up to 30 on a single pick.

## `minRating` (type: `integer`):

Pickswise rates every pick 1 to 5. Set 4 to keep only the strong ones, or 5 for Best Bets alone.

## `maxRating` (type: `integer`):

Upper bound on the same 1 to 5 scale.

## `minOdds` (type: `integer`):

Lower bound on the price, in American odds. Use -150 to drop anything shorter than -150; use 100 to keep underdogs only.

## `maxOdds` (type: `integer`):

Upper bound on the price, in American odds. Use 200 to drop longshots priced above +200.

## `minBooksQuoting` (type: `integer`):

Keep only picks where at least this many books priced the selection. This is checked before the bookmaker block is projected away, so you can demand a liquid market without buying the book grid.

## `startsAfter` (type: `string`):

Keep only rows whose game starts on or after this date. A bare date covers the whole day.

## `startsBefore` (type: `string`):

Keep only rows whose game starts on or before this date. A bare date covers the whole day.

## `searchQuery` (type: `string`):

Keep only rows mentioning this text in the selection, game, write-up, author or article body. Case-insensitive.

## `onlyWithOdds` (type: `boolean`):

Drop games with an empty odds board. Measured: 105 of 119 upcoming games carried prices.

## `onlyPinned` (type: `boolean`):

Keep only picks Pickswise has pinned to the top of the board.

## `onlyEdge` (type: `boolean`):

Keep only picks where the best book beats the median book, so line shopping actually gains you something. Turns on the line-shopping block automatically, since that is what measures it. True arbitrage needs both sides of a market and is reported on the game-odds collection instead.

## `promoStates` (type: `array`):

For the promo-codes collection. Two-letter US state codes, for example NJ or PA — a real server-side filter, measured at 28 of 88 offers for NJ. Leave empty for the national list.

## `promoTypes` (type: `array`):

For the promo-codes and sportsbooks collections. Another real server-side filter: sportsbook returns 47 offers, casino 32.

## `includeBookLines` (type: `boolean`):

Every book quoting the pick, side by side: American, decimal, implied probability and profit per $100, plus the spread or total each book is using, when it last moved, and the direct bet-slip deeplink where the book supports one. Measured at 30 books per pick and 29 per parlay. No extra requests — the prices arrive with the pick.

## `includeLineShopping` (type: `boolean`):

Computed from prices already downloaded, at no extra request. On picks and parlays: best and worst book, what shopping is worth in basis points against both the worst and the median book, consensus and best implied probability, and how wide the market is. On game odds: a true two-way de-vig — the overround, the book's hold percentage, vig-free fair probabilities and fair American lines for both sides, and a genuine arbitrage check with the stake split.

## `includePickAnalysis` (type: `boolean`):

The handicapper's complete write-up as clean text and as the original HTML, with a word count. The short summary is always included for free; this is the long form.

## `includePlayerProps` (type: `boolean`):

For the game-odds collection: every player market on the game, priced. These dominate a big slate — 499 of 1,355 markets across one upcoming board — so they are separated from the game markets and billed on their own.

## `includeArticleBody` (type: `boolean`):

For the news collection: the full article as clean text and as HTML, with a word count. Titles, metadata and related games come for free without it.

## `maxItems` (type: `integer`):

Stop after this many rows across every collection. The quota is claimed before a row is built, so a capped run never charges for a row it does not deliver.

## `proxyConfiguration` (type: `object`):

Not needed. The Pickswise API answered 30 concurrent requests with no rate limiting, no challenge and no key. Set one only if you want the run pinned to a region or routed through your own egress.

## Actor input object example

```json
{
  "datasets": [
    "picks"
  ],
  "leagues": [],
  "sports": [],
  "upcomingOnly": true,
  "marketTypes": [],
  "tags": [],
  "authors": [],
  "teams": [],
  "bookmakers": [],
  "onlyWithOdds": false,
  "onlyPinned": false,
  "onlyEdge": false,
  "promoStates": [],
  "promoTypes": [],
  "includeBookLines": false,
  "includeLineShopping": false,
  "includePickAnalysis": false,
  "includePlayerProps": false,
  "includeArticleBody": false,
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Every collected row, including any optional bookmaker price grids, line-shopping analytics, full written analysis, player props and article bodies

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "datasets": [
        "picks"
    ],
    "leagues": [],
    "sports": [],
    "marketTypes": [],
    "tags": [],
    "authors": [],
    "teams": [],
    "bookmakers": [],
    "promoStates": [],
    "promoTypes": [],
    "maxItems": 100,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/pickswise-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "datasets": ["picks"],
    "leagues": [],
    "sports": [],
    "marketTypes": [],
    "tags": [],
    "authors": [],
    "teams": [],
    "bookmakers": [],
    "promoStates": [],
    "promoTypes": [],
    "maxItems": 100,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/pickswise-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "datasets": [
    "picks"
  ],
  "leagues": [],
  "sports": [],
  "marketTypes": [],
  "tags": [],
  "authors": [],
  "teams": [],
  "bookmakers": [],
  "promoStates": [],
  "promoTypes": [],
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call parseforge/pickswise-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/pickswise-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/KuUMTPnfgSP9ZgEhm/builds/7kql8XjTBTmWjsgl8/openapi.json
