HowLongToBeat Scraper
Extract game completion times, play styles, and user-submitted duration data from HowLongToBeat.
- target
- howlongtobeat.com
- success rate
- 99.9%
- latency
- ~4ms
/fetch/howlongtobeat.com/ curl -X POST https://api.spider.cloud/fetch/howlongtobeat.com/ \ -H "Authorization: Bearer $SPIDER_API_KEY" \ -H "Content-Type: application/json" \ -d '{}'
{
"url": "https://howlongtobeat.com/",
"status": 200,
"data": {
"game_title": "string",
"main_story": "string",
"main_extras": "string",
"completionist": "string",
"platform": "string",
"genre": "string",
"developer": "string"
}
} # HowLongToBeat Scraper
**Game title**: string
**Main story**: string
**Main + extras**: string
**Completionist**: string
**Platform**: string
**Genre**: string
**Developer**: string Extract data in minutes.
Structured JSON from howlongtobeat.com with a single POST. Call it with no selectors and the model names the fields, or pass your own CSS to skip the AI.
import { SpiderBrowser } from "spider-browser";
const spider = new SpiderBrowser({
apiKey: process.env.SPIDER_API_KEY!,
stealth: 2,
});
await spider.connect();
const page = spider.page!;
await page.goto("https://howlongtobeat.com/game/68151");
// 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!,
stealth: 2,
});
await spider.connect();
const page = spider.page!;
await page.goto("https://howlongtobeat.com/game/68151");
await page.content(8000);
const data = await page.evaluate(`(() => {
const title = document.querySelector("h1")?.textContent?.trim();
const timePattern = /main|complete|\d+.*hour/i;
const times = [];
document.querySelectorAll("h4, h5, li").forEach(el => {
const text = el.textContent?.trim();
if (text && timePattern.test(text)) {
const label = el.querySelector("h4, h5")?.textContent?.trim() || text.split(/\d/)[0].trim();
const match = text.match(/[\d½]+\s*hours?/i);
if (match) times.push({ label, value: match[0] });
}
});
const summary = document.querySelector("p")?.textContent?.trim();
return JSON.stringify({ title, times, summary });
})()`);
console.log(JSON.parse(data));
await spider.close(); curl -X POST https://api.spider.cloud/fetch/howlongtobeat.com/ \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}' import requests
resp = requests.post(
"https://api.spider.cloud/fetch/howlongtobeat.com/",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={},
)
print(resp.json()) const resp = await fetch("https://api.spider.cloud/fetch/howlongtobeat.com/", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({}),
});
const data = await resp.json();
console.log(data); Fields you can pull.
Game metadata
Extract prices, reviews, system requirements, and ratings from howlongtobeat.com.
Store page handling
Handle dynamic storefronts, interactive catalogs, and lazy-loaded content.
Catalog coverage
Process entire game libraries and mod repositories at scale.
More Gaming & Esports scrapers.
Steam Scraper
Extract game listings, pricing, reviews, tags, and player counts from the Steam store and community pages.
Epic Games Store Scraper
Extract game listings, pricing, free game promotions, and metadata from the Epic Games Store.
GOG Scraper
Extract DRM-free game listings, pricing, compatibility info, and user ratings from the GOG store.
Start scraping howlongtobeat.com.
Grab an API key and call the endpoint above. The first request resolves the config; every request after hits cache.