Hacker News Scraper
Spider read news.ycombinator.com in 247 ms without a browser and returned 98 lines of clean markdown.
AMD acquires Taalas to boost inference performance by etching models in silicon (theregister.com)191 points by dsubburam3 hours agoMy phone detects going on a run as “someone snatching my phone and running off” (gamedev.place)Can you reverse engineer an ASIC? (janestreet.com)52 points by bschne5 hours agoHumans missed 1 in 3 threats approving AI agent commands across 40k game runs (scalex.dev)242 points by Wirbelwind12 hours agoLearn how chips are made with this Rollercoaster Tycoon-inspired animation (laurentiugabriel.github.io)101 points by laurentiurad8 hours agoThe Sylvester–Gallai Theorem (futilitycloset.com)4 points by surprisetalk1 hour agoShow HN: The Channels SDK – Bring Any Agent to Any Channel (Slack, MS Teams) (github.com/copilotkit)82 points by davidmckayv8 hours agoCrime Pays but Botany Doesn't (crimepaysbutbotanydoesnt.com)645 points by DarkContinent19 hours agoHow to Make a Nintendo 64 Game in 2026 (phoboslab.org)453 points by atan217 hours agoThe simple elegance of the integrated timing belt loopback fastener (danielmangum.com)91 points by hasheddan9 hours ago The same call, in code.
The capture above came back as markdown. These examples add a key, so you get browser rendering, proxies, and concurrency on news.ycombinator.com.
import { SpiderBrowser } from "spider-browser";
const spider = new SpiderBrowser({
apiKey: process.env.SPIDER_API_KEY!,
});
await spider.connect();
const page = spider.page!;
await page.goto("https://news.ycombinator.com/");
// No selectors, no schema. Spider reads the page and names the fields.
const data = await page.scrape();
console.log(data);
await spider.close(); import { SpiderBrowser } from "spider-browser";
const spider = new SpiderBrowser({
apiKey: process.env.SPIDER_API_KEY!,
});
await spider.connect();
const page = spider.page!;
await page.goto("https://news.ycombinator.com/");
const data = await page.evaluate(`(() => {
const stories = [];
document.querySelectorAll(".athing").forEach(el => {
const rank = el.querySelector(".rank")?.textContent?.trim();
const title = el.querySelector(".titleline a")?.textContent?.trim();
const url = el.querySelector(".titleline a")?.getAttribute("href");
const site = el.querySelector(".sitestr")?.textContent?.trim();
const subline = el.nextElementSibling;
const points = subline?.querySelector(".score")?.textContent?.trim();
const author = subline?.querySelector(".hnuser")?.textContent?.trim();
const comments = subline?.querySelector("a[href*='item']")?.textContent?.trim();
if (title) stories.push({ rank, title, url, site, points, author, comments });
});
return JSON.stringify({ total: stories.length, stories: stories.slice(0, 30) });
})()`);
console.log(JSON.parse(data));
await spider.close(); Ready for volume? Get an API key →
Fields you can pull.
Spider names these from the page. The capture above came back as markdown; the same
call with return_format: "json" returns them as keys.
What news.ycombinator.com costs to scrape.
The capture above cost $0.00007 to fetch. Pricing is $1 per GB of pre-transformation bandwidth plus $0.001 per CPU minute, so a page like this one lands at a fraction of a cent. Failed requests are billed at $0.
- Free balance on signup
- No card required to test
- Balance never expires
Run it keyless, no account
More AI & Developer scrapers.
ChatGPT Scraper
Extract shared ChatGPT conversations, prompts, and AI-generated content from public links.
Hugging Face Scraper
Extract ML model cards, dataset info, leaderboard data, and paper metadata from Hugging Face.
GitHub Scraper
Extract trending repositories, star counts, contributor data, and code snippets from GitHub.
Start scraping news.ycombinator.com.
You already have the call. A key raises the rate limit and turns on browser rendering, proxies, and concurrency. Balance never expires, and top-ups go through secure checkout.