outbid.lol Scraper - Bids, Clicks & Change Monitoring
Pricing
from $4.00 / 1,000 listings
outbid.lol Scraper - Bids, Clicks & Change Monitoring
Know what every outbid.lol listing pays and what it gets. The full pay-to-rank board in under 3 seconds, with clicks-per-dollar and cost-per-click on every row, plus change monitoring that reports who moved, who was outranked and who joined since your last run. No proxy cost.
Pricing
from $4.00 / 1,000 listings
Rating
5.0
(1)
Developer
Muhamed Didovic
Maintained by CommunityActor stats
0
Bookmarked
15
Total users
15
Monthly active users
2 days ago
Last modified
Categories
Share
outbid.lol Scraper — Leaderboard, Bids, Clicks & Change Monitoring
Scrape the entire outbid.lol pay-to-rank leaderboard — every listing's rank, bid, claim price, click count, cost-per-click, description and listing date — then track what moves between runs.

Why use this scraper
- The whole board, not the first page. Roughly 900 listings in under 3 seconds. No cap at rank 1,000.
- Change monitoring built in. The board re-ranks continuously. Turn on monitoring and each run reports what is new, gone, re-ranked, raised or gaining clicks, with the previous value and the delta on every row. Set
onlyChangesand a scheduled run bills for the handful of rows that moved instead of the whole board every time. - Filters that match how people actually query a leaderboard. Rank ranges (not just a ceiling), bid and click floors and ceilings, cost-per-click bounds, include and exclude keywords, per-field keyword targeting, domain and TLD filters, listing type, and three ways to filter by date.
- Board-level context, free. One unbilled
boardStatsrow per run carries live visitors, 30-day visitors, visitors since launch, total board revenue, listing count and the sum of every live bid. - No proxy cost. The actor clears the site's Vercel security checkpoint itself and runs direct by default. You are not paying for residential bandwidth you do not need.
- Opt-in contact emails. Every listing carries its own website, so email enrichment scrapes the real site rather than guessing at a company match. Billed only when an email is actually found.
Overview
outbid.lol is a public leaderboard where rank is bought: you pay a dollar amount and that amount is your position. It launched on 19 August 2026 and has carried over a million visitors, roughly 900 paid listings and about $132,000 in bids.
That makes the board a live, priced signal of what indie founders and small SaaS companies are willing to spend to get traffic — and, because every listing publishes its click count, of what that traffic is actually worth. This actor turns the board into structured rows you can sort, filter, diff and export.
The site renders each board page as a React Server Component payload, so the actor decodes that payload directly rather than parsing markup. There are no detail pages to fetch and no browser to run: every field arrives with the listing, 50 per request.
Supported inputs
| Input | What it does |
|---|---|
| (nothing) | Run with an empty input and get the entire board. |
https://outbid.lol/ | The board. Equivalent to an empty input. |
https://outbid.lol/?page=3 | Accepted; the actor still walks the board from rank 1. |
Only outbid.lol URLs are accepted. Anything else fails immediately with a clear message rather than silently scraping the board instead.
Use cases
- Competitive and ad-spend research. See exactly what competitors pay for placement and what each of them gets for it in clicks.
- Price the board before you bid.
claimPriceUsdtells you what it costs to take any given rank right now — $5 over the top bid for #1, $1 over the listing for anything else. - Find undervalued placement. Sort by
clicksPerDollar, or filter withmaxCostPerClickUsd, to see which bids are buying traffic cheaply. - Watch your own listing. Monitor mode tells you the moment you are outranked, with the rank delta and who passed you.
- Track a launch cohort. Filter by
listedWithinHours: 24to get every product that joined the board today. - Build a lead list. The board is 1,300+ founders who just demonstrated they will pay for traffic, each with a live URL and a self-written positioning line. Turn on
enrichEmailsto attach contact details.
How it works
- Clear the checkpoint. outbid.lol fronts the board with Vercel's security checkpoint. The actor clears it once at the start in a headless browser, then reuses that session for every request — no proxy needed, and no browser at all if the checkpoint happens to be off.
- Read the board API. Listings come straight from the site's own
/api/rankingJSON endpoint — 50 per page, each with every field the board knows — so there are no DOM selectors to break on a redesign. - Paginate in parallel. The API reports the board's exact size, so the actor fetches all pages concurrently and knows precisely when it is done. When
maxRankis the only filter set, it stops as soon as that rank is covered instead of pulling the whole board and discarding most of it. - Derive the economics.
clicksPerDollar,costPerClickUsdandclaimPriceUsdare computed per listing from the live board state. - Diff against the last run. With monitoring on, a snapshot in a named key-value store is compared to the current board and change rows are emitted.
Input configuration
Every field is optional.
| Field | Type | Default | Description |
|---|---|---|---|
startUrls | array | [] | outbid.lol URLs. Optional — the board is one paginated resource. |
minRank / maxRank | integer | 0 | Rank range. 0 = no bound. |
minBidUsd / maxBidUsd | integer | 0 | Bid range in USD. |
minClicks / maxClicks | integer | 0 | Click-count range. |
minCostPerClickUsd / maxCostPerClickUsd | number | 0 | Cost-per-click range. Listings with zero clicks are excluded when either bound is set. |
keywords | array | [] | Keep listings matching any of these. |
excludeKeywords | array | [] | Drop listings matching any of these. Wins over keywords. |
keywordFields | array | [] | Limit matching to url, domain, handle, name or description. |
domains | array | [] | Domain filter. Subdomains included; a bare TLD like .ai works. |
identityTypes | array | [] | website, x, or both. |
listedWithinHours | integer | 0 | Only listings first listed in the last N hours. |
listedAfter / listedBefore | string | "" | ISO date bounds, e.g. 2026-08-21. |
sortBy | string | rank | rank, bidDesc, bidAsc, clicksDesc, clicksPerDollarDesc, newest, oldest. |
monitorChanges | boolean | false | Diff against the previous run and emit change rows. |
onlyChanges | boolean | false | Emit only the changes. Requires monitorChanges. |
monitorStoreName | string | outbid-monitor | Named key-value store holding the snapshot. |
includeBoardStats | boolean | true | Append the unbilled board-statistics row. |
includeTrending | boolean | true | Add clicksLastHour to listings currently trending. |
enrichEmails | boolean | false | Scrape each listing's site for contact details. |
maxItems | integer | 100000 | Row cap. Free Apify accounts are capped at 100. |
maxConcurrency | integer | 8 | Pages fetched in parallel. |
proxy | object | direct | Off by default; the actor clears the site's checkpoint without one. |
Monitoring: give each schedule its own store
The snapshot lives in a named key-value store (outbid-monitor by default) because a run's default store is created fresh each run and could never carry state forward. If you run several monitors with different filters, give each one its own monitorStoreName — otherwise they overwrite each other's snapshot and every run reports the whole board as "new".
Output overview
Three row types, distinguished by rowType:
rowType | What it is | Billed |
|---|---|---|
listing | One board entry at its live rank. | Yes |
change | One listing that moved since the last run, with previous values and deltas. | Yes |
boardStats | One per run: visitors, revenue, listing count, summed bids. | No |
Output samples
A listing row:
{"rowType": "listing","rank": 1,"bidUsd": 14013,"claimPriceUsd": 14018,"identityType": "website","identityKey": "website:joni.ai","sourceUrl": "https://joni.ai/","domain": "joni.ai","handle": null,"displayName": "JONI | Your Personal AI Computer","description": "JONI is your personal AI computer. Chat once and a team of AI agents and skills gets to work, with the right model picked for every job.","clickCount": 8411,"clicksLastHour": 552,"clicksPerDollar": 0.6,"costPerClickUsd": 1.666,"isTakeover": false,"listedAt": "2026-08-21T19:52:11.016Z","listedAgoHours": 15.2,"entryId": "e52daf73-79da-4093-a811-f27c0ba908ac","boardUrl": "https://outbid.lol/","scrapedAt": "2026-08-22T11:06:04.587Z"}
A change row:
{"rowType": "change","changeType": "rankUp","rank": 6,"previousRank": 9,"rankDelta": 3,"bidUsd": 3500,"previousBidUsd": 3000,"bidDeltaUsd": 500,"clickCount": 921,"previousClickCount": 874,"clickDelta": 47,"domain": "fuellog.ai","previousSnapshotAt": "2026-08-22T10:05:21.311Z"}
The boardStats row:
{"rowType": "boardStats","liveVisitorCount": 685,"visitorsLast30Days": 127537,"visitorsSinceLaunch": 1154999,"boardRevenueUsd": 132785,"totalListings": 900,"sumOfLiveBidsUsd": 132791}
Key output fields
| Field | Meaning |
|---|---|
rank | Live board position. Always the true rank, never renumbered by filtering. |
bidUsd | What this listing currently pays. |
claimPriceUsd | What it would cost you to take this exact rank right now. |
clickCount | Lifetime clicks the board has recorded for this listing. |
clicksLastHour | Clicks in the last hour, for listings currently trending. |
clicksPerDollar | clickCount / bidUsd — the board's value metric. Higher is better placement value. |
costPerClickUsd | bidUsd / clickCount. null when a listing has no clicks yet. |
isTakeover | Whether this listing bought a full-board takeover (2× the top bid). |
listedAt | When the listing first appeared. Raises do not change it. |
changeType | new, gone, rankUp, rankDown, bidRaised or clicksJumped. |
Not included, on purpose: outbid.lol's public payload also carries polarOrderId and polarCheckoutId — its payment processor's internal order references for each buyer's transaction. They are of no analytical use, and reselling someone else's payment identifiers is not something this actor does. They are dropped.
FAQ
How many listings are there?
About 1,360 as of late August 2026, and still growing daily. There is no cap in this actor — you always get the full board, and its exact size is reported in the boardStats row.
How fast is it? The full board harvests in under 3 seconds once the run is going. Clearing the site's security checkpoint adds a few seconds of headless-browser startup at the beginning of each run.
Does it need a proxy? No. outbid.lol fronts the board with Vercel's security checkpoint, but the actor clears it itself and then reads the board's JSON API directly. The proxy input exists if you want the traffic from a specific network, but leaving it off costs you nothing in quality and saves you the proxy bill.
Why did my first monitoring run report zero changes? There was nothing to compare against. The first run stores a baseline; the second run onward reports the diff.
Why did a monitoring run report the whole board as new?
The snapshot is per store, and it records the listings your filters returned. If you change filters between runs, everything outside the old filter looks new. Give each filter configuration its own monitorStoreName.
Can I get contact emails?
Turn on enrichEmails. Because each listing already carries its own website, enrichment reads that site directly instead of guessing which company a name refers to. It is best-effort — expect a hit rate, not a guarantee — and you are billed only for listings where an email is found.
Are costPerClickUsd figures reliable?
They are exactly bidUsd / clickCount as the board reports both. Note that outbid.lol's click counter is an open, unauthenticated endpoint, so a handful of listings show click counts far outside the distribution of everything else. Treat extreme outliers as unverified.
Do I pay for the boardStats row? No. It is one row of context per run and it is not billed.
Support
Found a bug or need a field that is not here? Open an issue on the actor's Issues tab and it will be looked at.
Additional services
Need a scraper for a site that is not on the Store yet, or a custom data pipeline? Get in touch through the Apify profile.
Explore more scrapers
🤖 For AI agents & LLM apps
This actor is a good fit for agent pipelines: it needs no input to produce useful output, it returns strictly typed rows, and it is cheap and fast enough to call on a schedule.
{"maxRank": 50,"sortBy": "clicksPerDollarDesc","includeBoardStats": true}
Call it via the Apify API, or through the Apify MCP server as memo23/outbid-scraper. For a change feed, set monitorChanges: true and onlyChanges: true and poll on a schedule — a quiet interval returns a handful of rows.
⚠️ Disclaimer
This actor collects only data that outbid.lol publishes publicly and serves to any visitor without authentication. It does not bypass access controls, solve challenges, log in, or collect private personal information. Payment-processor identifiers present in the site's public payload are deliberately excluded from the output.
You are responsible for how you use the data, including compliance with outbid.lol's terms, applicable data-protection law such as GDPR and CCPA, and anti-spam rules such as CAN-SPAM if you use the optional email-enrichment output. Scrape responsibly and at a reasonable rate.
SEO keywords
outbid.lol scraper, outbid leaderboard scraper, outbid.lol api, pay to rank leaderboard data, leaderboard scraper, bid tracking scraper, startup directory scraper, indie hacker directory data, click analytics scraper, cost per click data, competitive intelligence scraper, advertising research data, product launch tracker, rank monitoring, leaderboard change detection, startup lead generation, founder contact emails, apify outbid actor