# outbid.lol Scraper: Bids, Clicks & Rank Changes (`getascraper/outbid-lol-scraper`) Actor

Scrape the full outbid.lol pay-to-rank leaderboard: bid amounts, clicks, cost-per-click and clicks-per-dollar on every listing. Track what moved, what was outranked and what joined since your last run. No login needed.

- **URL**: https://apify.com/getascraper/outbid-lol-scraper.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.64 / 1,000 board rows

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?

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

## 🏆 outbid.lol Scraper: Bids, Clicks & Rank Changes

<table width="100%">
<tr>
<td style="padding:24px 28px;background:#FFFBEB;border:1px solid #FDE68A;border-top:4px solid #B45309;border-radius:12px">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">See exactly what everyone paid to rank on outbid.lol</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Every listing's bid, clicks, cost-per-click and clicks-per-dollar, plus the exact price to claim any rank, pulled fresh on every run.</span>
</td>
</tr>
</table>

<table width="100%">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #FDE68A;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#92400E">💰 Full price transparency</span><br>
<span style="font-size:12px;color:#57534E">Every listing's bid next to cost-per-click and clicks-per-dollar.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #FDE68A;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#92400E">🎯 Know the overtake price</span><br>
<span style="font-size:12px;color:#57534E">See what it costs in dollars to outrank any specific listing.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #FDE68A;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#92400E">🔄 Built-in change tracking</span><br>
<span style="font-size:12px;color:#57534E">A dedicated mode flags what's new, moved, or dropped since your last run.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #FDE68A;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#92400E">🔎 Look up by domain</span><br>
<span style="font-size:12px;color:#57534E">Pull instant detail on specific listings without scanning the whole board.</span>
</td>
</tr>
</table>

outbid.lol is a pay-to-rank leaderboard: you pay a dollar amount and that amount becomes your position on the board. This Actor scrapes the full leaderboard across all categories and turns it into structured data, ready for a spreadsheet, a dashboard, or a scheduled monitor. No login required.

### 🔍 What does it do?

This Actor runs in three modes:

- **Board mode** returns the full leaderboard ranked by bid: every listing's rank, category, bid amount, click count, cost-per-click, clicks-per-dollar, and the price to claim (overtake) that rank.
- **Changes mode** compares the current board against your last run and returns only what changed: new listings, rank moves, and drops. Built for scheduled recurring runs so you never have to diff the data yourself.
- **Product mode** looks up specific listings by domain, for when you only care about a handful of companies.

Filter any run by category, bid range, minimum clicks, or keyword (include or exclude) to focus on exactly the slice of the board you need.

### 🙋 Who is it for?

- **I am a SaaS founder** deciding whether to buy a spot on outbid.lol, and I need to see the current rank, the going bid, and exactly what it would cost to overtake a specific competitor before I commit budget.
- **I am a competitive intelligence or growth lead** tracking which companies are spending on this channel, how their bids move over time, and whether that spend is actually converting into clicks.
- **I am a bargain hunter** scanning for undervalued placements, listings pulling strong clicks-per-dollar at a low bid, before other buyers notice and the price climbs.

### 🚀 How to use it

<table width="100%">
<tr>
<td style="padding:16px 14px;width:33%;background:#FFFBEB;border:1px solid #FDE68A;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#B45309;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Pick a mode</span><br>
<span style="font-size:12px;color:#57534E">Board for the full leaderboard, Changes to track movement, Product to look up specific domains.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#FFFBEB;border:1px solid #FDE68A;border-left:none;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#B45309;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Narrow with filters</span><br>
<span style="font-size:12px;color:#57534E">Filter by category, bid range, click count, or keyword to focus on what matters.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#FFFBEB;border:1px solid #FDE68A;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#B45309;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Get value metrics instantly</span><br>
<span style="font-size:12px;color:#57534E">Every row comes with cost-per-click, clicks-per-dollar, and the exact claim price.</span>
</td>
</tr>
</table>

1. Click **Try for free** and choose your mode (Board, Changes, or Product).
2. Add any filters you want (category, bid range, click count, keyword).
3. Run the Actor. Results land in your dataset, ready to export as JSON, CSV, or Excel.
4. For ongoing tracking, schedule Changes mode to run daily or weekly and watch what moves.

### 📋 Input

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `mode` | enum | No | What to scrape. `board` returns the full leaderboard, `changes` compares against your last run, `product` returns detail for specific domains. Defaults to `board`. |
| `categories` | array of strings | No | Only keep listings from these category slugs, such as `developer-tools` or `ai-agents-infrastructure`. Leave empty for all categories. Applies to Board and Changes modes. |
| `minBidUsd` | integer | No | Only keep listings bidding at least this amount. |
| `maxBidUsd` | integer | No | Only keep listings bidding at most this amount. Useful for finding undervalued placements. |
| `minClicks` | integer | No | Only keep listings with at least this many total clicks. |
| `keyword` | string | No | Only keep listings whose name, description, or URL contains this text. Not case-sensitive. |
| `excludeKeyword` | string | No | Drop listings whose name, description, or URL contains this text. Not case-sensitive. |
| `products` | array of strings | No | Domains to fetch detail for, such as `example.com`. Only used in Product mode. |
| `maxItems` | integer | No | Maximum number of records to push to the dataset. Use `0` for no limit. Defaults to `500`. You are billed per record returned. |
| `proxyConfiguration` | object | No | Proxy settings for the run. Residential proxy is recommended and set as the default for reliable coverage across every category. |

### 📊 Data table

| Field | Type | Description |
| --- | --- | --- |
| `rowType` | string | `listing` for Board and Product mode rows, `change` for Changes mode rows. |
| `id` | string | The listing's unique ID on outbid.lol. |
| `rank` | number | Current overall rank on the leaderboard. |
| `categoryRank` | number | Current rank within the listing's category. |
| `categorySlug` | string | The category the listing belongs to. |
| `displayName` | string | The listing's name as shown on the board. |
| `identityKey` | string | Stable key used to match a listing across runs, e.g. `website:outrank.so`. |
| `sourceUrl` | string | The listing's own website. |
| `imageUrl` | string | The listing's logo or thumbnail image. |
| `description` | string | The listing's short description. |
| `bidUsd` | number | Current bid amount in dollars, which determines rank. |
| `claimPriceUsd` | number | What it costs, in dollars, to overtake this listing's rank. |
| `clickCount` | number | Total clicks the listing has received. |
| `costPerClickUsd` | number | Bid divided by clicks: what the buyer is effectively paying per click. |
| `clicksPerDollar` | number | Clicks divided by bid: how much traffic the buyer is getting per dollar spent. |
| `createdAt` | string | When the listing was first added to the board. |
| `listingUrl` | string | Direct link to the listing's page on outbid.lol. |
| `changeType` | string | Changes mode only. One of `new`, `moved`, or `dropped`. Check `rankDelta` for direction and size on a `moved` row. |
| `previousRank` | number | Changes mode only. The listing's rank on the previous run. |
| `previousBidUsd` | number | Changes mode only. The listing's bid on the previous run. |
| `rankDelta` | number | Changes mode only. How many places the rank moved since the previous run. |

#### Example output (Board mode)

```json
{
  "rowType": "listing",
  "id": "3fc47ba1-c273-4c9a-a601-4b3a7042defe",
  "rank": 4,
  "categoryRank": 2,
  "categorySlug": "developer-tools",
  "displayName": "Outrank",
  "identityKey": "website:outrank.so",
  "sourceUrl": "https://outrank.so",
  "imageUrl": "https://outbid.lol/images/outrank.png",
  "description": "AI content engine for SEO teams",
  "bidUsd": 47,
  "claimPriceUsd": 48,
  "clickCount": 312,
  "costPerClickUsd": 0.15,
  "clicksPerDollar": 6.64,
  "createdAt": "2026-08-10T14:22:00.000Z",
  "listingUrl": "https://outbid.lol/product/outrank.so"
}
```

#### Example output (Changes mode)

```json
{
  "rowType": "change",
  "changeType": "moved",
  "displayName": "Outrank",
  "categorySlug": "developer-tools",
  "rank": 4,
  "previousRank": 9,
  "rankDelta": 5,
  "bidUsd": 47,
  "previousBidUsd": 22,
  "listingUrl": "https://outbid.lol/product/outrank.so"
}
```

### 💰 Pricing

This Actor is pay per result: you are billed per record saved to your dataset, and nothing else. An empty run, or a run where nothing changed, costs nothing. There are no subscriptions or fixed monthly fees.

### ⭐ Enjoying outbid.lol Scraper?

<table width="100%">
<tr>
<td style="padding:20px 24px 14px;background:#FFFBEB;border:1px solid #FDE68A;border-left:5px solid #B45309;border-radius:10px 10px 0 0">
<span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#1C1917">A five-star rating helps other bidders find the tool that shows them exactly what a rank costs before they pay for it.</span><br>
<span style="font-size:14px;color:#57534E">It takes about 10 seconds and tells us what to build next.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#B45309;border:1px solid #FDE68A;border-top:none;border-radius:0 0 10px 10px;text-align:center">
<a href="https://apify.com/getascraper/outbid-lol-scraper/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

### ❓ FAQ

##### Does it need a login to work?

No. Every listing on outbid.lol is public, and this Actor reads the same public leaderboard pages a visitor would see. No account or password is required.

##### Does it get blocked?

No. The Actor connects the same way a real browser does, so it passes the site's bot check on its own. It does use residential proxy by default to keep every category page loading reliably in one run.

##### How fresh is the data?

Every run reads the live leaderboard at the moment it runs. Nothing is cached or pulled from a stale copy.

##### Are all categories covered?

Yes. The Actor discovers the full category list on every run, so newly added categories show up automatically without waiting for an update.

##### What counts as a "change" in Changes mode?

A listing counts as new if it wasn't on the board last run, moved if its rank shifted up or down, and dropped if it was on the board last run but isn't anymore. Everything else is left out of the output, so you only see what actually changed.

### 🔗 Other actors

- [SaaS Pricing Monitor: Competitor Plan Changes](https://apify.com/getascraper/saas-pricing-change-monitor) ↗ - tracks competitor SaaS pricing pages and flags plan or price changes.
- [Startup investor contact database](https://apify.com/getascraper/startup-investor-contact-database) ↗ - builds a structured database of startup investors and their contact details.
- [Newsletter Sponsor Intelligence](https://apify.com/getascraper/newsletter-sponsor-intelligence) ↗ - surfaces which brands are sponsoring newsletters and how often.
- [Website Technology Change Monitor: Tech Signals](https://apify.com/getascraper/website-technology-change-monitor) ↗ - tracks when a website adds, drops, or swaps its technology stack.
- [Domain Health Monitor: WHOIS, DNS & SSL Monitor](https://apify.com/getascraper/domain-health-monitor) ↗ - watches a domain's WHOIS, DNS, and SSL status for changes.

# Actor input Schema

## `mode` (type: `string`):

What to scrape. 'Board' returns every listing currently on the leaderboard. 'Changes' compares against your last run and returns only what's new, moved, or dropped. 'Product' returns detail for specific listings by domain.

## `categories` (type: `array`):

Only keep listings from these category slugs (e.g. 'developer-tools', 'ai-agents-infrastructure'). Leave empty for all categories. Applies to Board and Changes modes.

## `minBidUsd` (type: `integer`):

Only keep listings bidding at least this much.

## `maxBidUsd` (type: `integer`):

Only keep listings bidding at most this much. Useful for finding undervalued placements.

## `minClicks` (type: `integer`):

Only keep listings with at least this many total clicks.

## `keyword` (type: `string`):

Only keep listings whose name, description or URL contains this text (case-insensitive).

## `excludeKeyword` (type: `string`):

Drop listings whose name, description or URL contains this text (case-insensitive).

## `products` (type: `array`):

Domains to fetch detail for, e.g. 'example.com'. Only used in Product mode.

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

Maximum number of records to push to the dataset. Use 0 for no limit. You are billed per record returned.

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

Residential proxy is recommended and set as the default. outbid.lol rate-limits shared datacenter IPs more aggressively when this Actor fetches many category pages in one run.

## Actor input object example

```json
{
  "mode": "board",
  "categories": [
    "developer-tools"
  ],
  "products": [
    "outrank.so"
  ],
  "maxItems": 500,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

No description

# 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 = {
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/outbid-lol-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 = { "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    } }

# Run the Actor and wait for it to finish
run = client.actor("getascraper/outbid-lol-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 '{
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call getascraper/outbid-lol-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,getascraper/outbid-lol-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/0QX3GBgorfCi4Zlu4/builds/LBnAUy7hZ2tFdJZlD/openapi.json
