# Tipstrr NBA Tipster Performance Export (`automation-lab/tipstrr-nba-tipster-performance`) Actor

Export publicly displayed all-time NBA tipster sample, ROI, win rate, monetary profit and odds from supplied Tipstrr stats links. Retain source provenance, explicitly derived units and below-200 sample flags; no private picks or analyst rankings.

- **URL**: https://apify.com/automation-lab/tipstrr-nba-tipster-performance.md
- **Developed by:** [Automation Lab](https://apify.com/automation-lab) (community)
- **Categories:** Sports
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $8.27 / 1,000 public profile checkeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Tipstrr NBA Tipster Performance Export

Export **Tipstrr NBA performance** from supplied public profile stats links for historical analyst comparison. The Actor selects **All time** and exports only the separately displayed **NBA / United States** league row: sample, ROI, win rate, monetary profit and average odds, with source and staking provenance.

It does not discover or recommend the best handicappers. A supplied profile can have fewer than 200 NBA tips—or no separately displayed NBA row at all. Those facts are preserved rather than replaced with overall basketball totals.

### Who is this for?

Sports-data researchers and analysts comparing a known list of publicly tracked profiles can collect consistent snapshots for a spreadsheet or research pipeline. This is a historical data export, not betting advice, a guarantee of profitable performance, or independent verification of Tipstrr grading.

### Why use this Actor?

- Exact NBA scope excludes WNBA, other leagues and combined basketball totals.
- All-time period selection avoids accidentally mixing recent and lifetime statistics.
- Monetary and unit profit are separate fields. Unit profit is derived only when an explicit matching monetary unit basis exists.
- Small samples remain visible with `insufficientSample: true` below 200 displayed tips.
- Public profile links, displayed metric strings and extraction timestamps make comparisons traceable.

### Getting started

1. Find a publicly accessible Tipstrr profile stats link.
2. Add it to `startUrls` and set a profile cap.
3. Run the Actor. It uses anonymous US residential browser sessions automatically.
4. Inspect the default dataset and the `SUMMARY` record.
5. Export JSON, CSV or Excel through Apify's dataset export tools.

```json
{
  "startUrls": [
    {"url": "https://tipstrr.com/tipster/pro-basket-pioneer/stats"}
  ],
  "maxItems": 1
}
```

### Inputs and scope

| Input | Behavior |
| --- | --- |
| `startUrls` | 1–50 public HTTPS `tipstrr.com/tipster/<slug>/stats` links. Strings or URL objects are accepted. Queries, fragments, credentials and other domains are rejected. |
| `maxItems` | Maximum unique profiles inspected across the run, after deduplication, in supplied order. Default 10; 1–50 accepted. Zero/unlimited is unsupported. |

There is no profile discovery, league search, date-range mode or pagination. The period is always All time. Missing NBA rows consume the profile-inspection limit and incur the same profile-check charge, with the result recorded in the summary rather than a fabricated dataset row. The below-200 flag does not filter records.

### Exported Tipstrr NBA performance

| Fields | Meaning |
| --- | --- |
| `profileUrl`, `profileSlug` | Source profile record and identifier. |
| `league`, `country`, `period` | Exact NBA / United States / all-time scope. |
| `sampleSize`, `sampleLabel` | Displayed Tips count; not independently audited graded picks. |
| `winRatePercent`, `roiPercent` | Displayed percentages as numbers. |
| `monetaryProfit`, `currency` | Monetary profit under the logged-out default staking settings. |
| `averageOdds` | Displayed average decimal odds, preserving source rounding. |
| `unitProfit`, `unitProfitIsDerived` | Explicitly derived unit profit or null; never presented as source-reported. |
| `monetaryAmountPerUnit`, `stakingBasis` | Conversion basis and source explanation. |
| `unitProfitUnavailableReason` | Explanation when no matching unit basis exists. |
| `insufficientSample`, `sampleThreshold` | Comparison flag using the fixed 200-tip threshold. |
| `displayedMetrics` | Original display strings in Tips, win rate, profit, ROI, odds order. |
| `sourceApiUrl`, `scrapedAt` | Public stats endpoint observed during selection and UTC extraction time. |

### Example output

The following metrics were observed on the example public profile. They can change as the source updates.

```json
{
  "profileUrl": "https://tipstrr.com/tipster/pro-basket-pioneer/stats",
  "profileSlug": "pro-basket-pioneer",
  "league": "NBA",
  "country": "United States",
  "period": "all-time",
  "sampleSize": 23,
  "sampleLabel": "Tips",
  "winRatePercent": 61,
  "roiPercent": 30.9,
  "monetaryProfit": 71.15,
  "currency": "GBP",
  "averageOdds": 2.04,
  "unitProfit": 71.15,
  "unitProfitIsDerived": true,
  "monetaryAmountPerUnit": 1,
  "insufficientSample": true,
  "sampleThreshold": 200
}
```

The source states that 10/10 units equals £10. Therefore the monetary amount per unit is £1 and £71.15 converts to 71.15 units. The complete row retains that explanatory text. If a matching basis is unavailable, unit profit stays null.

### Coverage and missing data

`SUMMARY` contains requested and checked profile counts, exported NBA row count, period, sample threshold and links without a separate NBA row. It also exposes `partial`, `stopReason` and `unprocessedProfiles`. It is saved before work and after every completed check, so completed checks remain inspectable even if a later profile fails. An empty dataset can legitimately mean none of the supplied profiles exposes an exact NBA row. The Actor does not infer an NBA breakdown from Other or Basketball.

No minimum number of qualifying analysts is promised. Public profile metrics do not establish that a tipster is NBA-only, that all selections were independently audited, or that historical records predict future performance.

### How much does it cost to export Tipstrr NBA performance?

Each successfully checked public profile incurs one `item` event, whether it yields an NBA dataset row or a verified no-NBA observation. Missing-row observations are saved in the summary record; it has no separate event charge. A one-time `start` event costs $0.025 per run. Invalid inputs are rejected before charging. Navigation failures are not profile-check charges; retries never double-charge a completed check. The Actor checks the remaining budget for the specific item event before inspecting another profile, accepts its charge before saving its result, and stops with a partial SUMMARY when the budget cannot cover another check. Below-start budgets do no source work or charging; start-only budgets can pay the start fee without inspecting a profile.

| Plan | Price per checked profile |
| --- | --- |
| FREE | $0.015845 |
| BRONZE | $0.013778 |
| SILVER | $0.010747 |
| GOLD, PLATINUM, DIAMOND | $0.0082668 |

Worked example at BRONZE: start + checked profiles × item price. For 1, 5 or 10 checks, estimated totals are $0.025 + 1 × $0.013778 = $0.038778, $0.025 + 5 × $0.013778 = $0.09389 and $0.025 + 10 × $0.013778 = $0.16278 respectively. The profile limit counts checks, not NBA rows, and no minimum NBA coverage is guaranteed.

### Reliability and limits

The source uses anti-bot protection. The Actor packages Camoufox and uses US residential proxy sessions, with irrelevant images, media, fonts and third-party trackers blocked. A healthy browser/session is reused serially for up to eight profile checks before renewal; only public static scripts/styles are cached in bounded run-local memory. Transient/challenge navigation gets at most one fresh-browser/fresh-session retry. Invalid inputs, permanent 404s and unexpected metric formats fail rather than silently invent data.

A failed run may retain partial rows; do not label those a complete export. Source statistics say they update every 24 hours, so scheduling more often does not guarantee new information. Keep normal runtime and billing limits appropriate to your list.

### Integrations

Download a dataset into Excel or Google Sheets and compare profiles by cited NBA sample and ROI. Preserve `period`, `currency`, `stakingBasis` and the below-200 flag when comparing rows. For recurring snapshots, schedule repeated runs and retain `scrapedAt` downstream; this Actor does not compute changes or send alerts itself.

Use Apify webhooks to pass completed datasets to Make, Zapier or a data warehouse. A completion webhook is orchestration, not evidence that the source has changed.

### API usage

Keep your Apify token outside input and source files.

```bash
curl -X POST -H "Authorization: Bearer $APIFY_TOKEN" \
  -H 'Content-Type: application/json' \
  'https://api.apify.com/v2/acts/automation-lab~tipstrr-nba-tipster-performance/runs' \
  -d '{"startUrls":[{"url":"https://tipstrr.com/tipster/pro-basket-pioneer/stats"}],"maxItems":1}'
```

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/tipstrr-nba-tipster-performance').call({
  startUrls: [{ url: 'https://tipstrr.com/tipster/pro-basket-pioneer/stats' }], maxItems: 1,
});
console.log((await client.dataset(run.defaultDatasetId).listItems({ limit: 50 })).items);
```

```python
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/tipstrr-nba-tipster-performance').call(run_input={
    'startUrls': [{'url': 'https://tipstrr.com/tipster/pro-basket-pioneer/stats'}],
    'maxItems': 1,
})
print(client.dataset(run['defaultDatasetId']).list_items(limit=50).items)
```

### MCP access

```bash
claude mcp add --transport http apify \
  'https://mcp.apify.com?tools=automation-lab/tipstrr-nba-tipster-performance'
```

```json
{"mcpServers":{"apify":{"type":"http","url":"https://mcp.apify.com?tools=automation-lab/tipstrr-nba-tipster-performance"}}}
```

For Claude Desktop, Cursor and VS Code, use the equivalent HTTP MCP configuration above and your client's supported authentication setup.

Discover the actual scoped tool names and schemas with `tools/list`; the selection also adds run/data helper tools, not exactly one tool. For an authorized run, start once and retain the run ID. If it remains nonterminal, check that same run with bounded backoff (2, 4, 8 seconds, capped at 10) and a 120-second consumer deadline. A client timeout is not a reason to launch a duplicate run. At the deadline, report pending with the known ID.

After success, retrieve dataset pages with explicit limit, offset and fields. For model context, use at most 100 source rows and 64 KiB of serialized UTF-8 content, whichever comes first; enforce byte limits host-side and disclose omitted content. Keep full exports downstream. Failed-run rows are partial. These are consumer context limits, not Actor collection limits or token-savings guarantees.

Example prompt: “Export the public all-time NBA performance from this supplied stats link. Retain sample flags and show whether unit profit is explicitly derived. Do not recommend bets or imply that a small sample qualifies.”

### Legality, responsible use and privacy

Use only supplied public stats pages and respect source terms and applicable law. The Actor does not access logged-in dashboards, private or premium picks, or bypass a paid membership. It is not affiliated with Tipstrr. Past performance is not a promise of future results. No wagering or investment advice is provided.

No AI provider receives input or extracted records at runtime. Apify hosts execution, dataset/KV storage and residential proxy infrastructure; their required operating costs are owned by us, with no additional source account or off-platform fee. Anonymous browser cookies exist only during each profile attempt and are not persisted to Actor storage.

Dataset and SUMMARY records remain in your Apify run storage under your account retention settings until deleted there. We do not create a separate cross-run profile archive. Delete run storage through Apify when no longer needed; platform backups follow Apify's policy. For assistance, use the Actor's Apify Issues tab.

Failed operations send sanitized diagnostic input, exceptions and Actor/build/run IDs to our private GlitchTip service for repair. Secret fields and URL queries are removed; reports are retained for 30 days.

### FAQ and troubleshooting

**Does this find 5–10 qualified NBA-only analysts?** No. It exports supplied public profiles and transparently flags their displayed NBA samples. It does not vet, rank or discover analysts.

**Why is there no NBA row?** The source may show only another league or combine results into Other. Check `SUMMARY`; totals from Basketball are deliberately not substituted.

**Why are units null?** A monetary number alone does not establish unit profit. An explicit matching monetary-to-unit basis is required.

**Why did the run fail?** Invalid profile URLs, a missing profile, exhausted anti-bot sessions, or a changed table format can fail the run. Review logs and any partial output; never interpret a failure as a zero-profit record.

**Can I request another period or source?** Not in this Actor. Only all-time public Tipstrr NBA league statistics are supported.

### Related workflows

This is a standalone historical performance product. Odds and current-pick exports solve different jobs; they must not be merged as if they were tracked NBA historical records.

# Changelog

This Actor's version history is a separate document: https://apify.com/automation-lab/tipstrr-nba-tipster-performance/changelog.md

# Actor input Schema

## `startUrls` (type: `array`):

Supply 1–50 HTTPS links in the exact form https://tipstrr.com/tipster/<slug>/stats. Query strings, fragments, credentials and other sources are rejected. Duplicate URLs are removed before maxItems is applied. Only NBA / United States is exported, never WNBA or overall basketball; profiles without a separate NBA row are listed in SUMMARY without a fabricated dataset row. Each successfully checked public profile incurs one item event, including a verified missing-NBA result; retries and failed navigations are not additional profile-check charges.

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

Global cap on unique supplied profiles inspected, in input order, after deduplication. Default 10, range 1–50; zero/unlimited is unsupported. Missing NBA rows still consume this profile cap, so dataset rows may be fewer. No discovery or pagination is performed.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://tipstrr.com/tipster/pro-basket-pioneer/stats"
    }
  ],
  "maxItems": 10
}
```

# Actor output Schema

## `dataset` (type: `string`):

Only exact publicly displayed NBA / United States rows.

## `summary` (type: `string`):

Inspected profile count and profiles without a separate NBA row.

# 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 = {
    "startUrls": [
        {
            "url": "https://tipstrr.com/tipster/pro-basket-pioneer/stats"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/tipstrr-nba-tipster-performance").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 = { "startUrls": [{ "url": "https://tipstrr.com/tipster/pro-basket-pioneer/stats" }] }

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/tipstrr-nba-tipster-performance").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 '{
  "startUrls": [
    {
      "url": "https://tipstrr.com/tipster/pro-basket-pioneer/stats"
    }
  ]
}' |
apify call automation-lab/tipstrr-nba-tipster-performance --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,automation-lab/tipstrr-nba-tipster-performance"
        }
    }
}
```

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/9JQh2kXs3XhMPRMsL/builds/70tf9fSuApd2ojB14/openapi.json
