Scrapeless APIscrapeless.com ↗
Retrieve Scrapeless's full public plan catalog via one endpoint. Filter by category or billing interval. Returns pricing, discounts, and plan metadata.
What is the Scrapeless API?
The Scrapeless Plans API exposes the complete public subscription catalog from scrapeless.com in a single call, returning up to 22 plan objects per request. The list_subscription_plans endpoint delivers structured plan metadata including price, discount, billing interval, and category, with optional filters to narrow results to a specific plan type or interval.
curl -X GET 'https://api.parse.bot/scraper/e911bed6-68c3-4664-93f3-aff7ae883c45/list_subscription_plans?category=regular&interval=month' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace scrapeless-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Scrapeless subscription plans — browse the public catalog."""
from parse_apis.scrapeless_com_api import Scrapeless, PlanCategory, BillingInterval, InputFormatInvalid
client = Scrapeless()
# List all monthly regular plans, capped to 10 items.
for plan in client.plans.list(category=PlanCategory.REGULAR, interval=BillingInterval.MONTH, limit=10):
print(plan.label, f"${plan.price_usd}/mo", f"free={plan.is_free}")
# Drill into the first yearly plan to inspect per-product pricing.
try:
yearly_plan = client.plans.list(interval=BillingInterval.YEAR, limit=1).first()
except InputFormatInvalid as e:
print("Invalid filter value:", e.message)
yearly_plan = None
if yearly_plan is not None:
print(yearly_plan.label, yearly_plan.plan_id, f"${yearly_plan.price_usd}/yr")
for product, rate in yearly_plan.product_pricing.items():
print(f" {product}: ${rate}")
for product, cap in yearly_plan.product_max_concurrent.items():
print(f" {product} concurrency: {cap}")
print("exercised: plans.list (filtered by category, interval, and year)")
Returns the full public catalog of Scrapeless subscription plans in one round trip (no pagination; the catalog held 22 plans at build time). Each row is one plan variant identified by plan_id (e.g. a monthly and a yearly variant of the same plan type are separate rows). Prices are in USD as published by the site: price_usd is the amount charged for the interval, raw_price_usd the undiscounted amount, discount the multiplier applied to per-product unit rates. product_pricing maps each product (proxy, browser, unlocker, serpapi, scraper, ...) to its unit rate in USD under the plan; product_max_concurrent maps products to their concurrency limits. Optional category and interval filters are applied to the catalog; a filter that matches nothing yields an empty plans array with total 0 while source_total still reports the catalog size. Rows are sorted by the site's own display order.
| Param | Type | Description |
|---|---|---|
| category | string | Plan category filter. Omitted = all categories. |
| interval | string | Billing interval filter. Omitted = both monthly and yearly plans. |
{
"type": "object",
"fields": {
"plans": "array of plan objects: plan_id, type, label, category, interval, price_usd, raw_price_usd, discount, is_free, is_trial, is_default, support_level, supported_features (array of feature keys), order, product_pricing (product -> unit rate USD), product_max_concurrent (product -> concurrency limit)",
"total": "integer count of plans returned after filtering",
"source_total": "integer count of plans in the site's full catalog before filtering"
},
"sample": {
"data": {
"plans": [
{
"type": "growth",
"label": "Growth",
"order": 1000,
"is_free": false,
"plan_id": "growth_year",
"category": "regular",
"discount": 0.9,
"interval": "year",
"is_trial": false,
"price_usd": 529,
"is_default": false,
"raw_price_usd": 588,
"support_level": "customer_service",
"product_pricing": {
"isp": 2.25,
"ipv6": 0.36,
"proxy": 1.62,
"browser": 0.081,
"scraper": 2.7,
"serpapi": 0.9,
"unlocker": 0.9,
"AI Scraper": 1.62,
"datacenter": 0.72,
"residential": 1.62
},
"supported_features": [
"support.browserless.custom_proxy"
],
"product_max_concurrent": {
"actor": 10,
"browser": 100,
"captcha": 250,
"scraper": 1000,
"unlocker": 250,
"AI Scraper": 100
}
}
],
"total": 3,
"source_total": 22
},
"status": "success"
}
}About the Scrapeless API
What the API Returns
The single list_subscription_plans endpoint returns the full public plan catalog for Scrapeless in one response with no pagination. Each entry in the plans array is a distinct plan variant — monthly and yearly configurations of the same plan tier appear as separate rows, each with its own plan_id. The response also includes a total count reflecting the number of plans after any applied filter, alongside a source_total representing the unfiltered catalog size.
Plan Object Fields
Every plan object carries: plan_id, type, label, category, interval (monthly or yearly), price_usd, raw_price_usd (pre-discount price), discount, is_free, is_trial, and is_default. The distinction between price_usd and raw_price_usd lets you calculate the effective savings on any annual commitment without additional computation.
Filtering Options
Two optional query parameters let you slice the catalog. Pass category to retrieve only plans belonging to a specific product tier or service grouping. Pass interval to limit results to monthly or yearly billing variants. Both filters can be combined or omitted entirely to return all 22 plans in a single response.
The Scrapeless API is a managed, monitored endpoint for scrapeless.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when scrapeless.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official scrapeless.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a pricing comparison widget that highlights yearly vs. monthly savings using
price_usdandraw_price_usd - Detect when Scrapeless adds or removes plans by comparing
source_totalover time - Identify all free or trial-eligible plans by filtering on
is_freeandis_trialflags - Map plan categories to internal product SKUs using the
categoryandtypefields - Monitor discount changes across plan variants to track promotional pricing windows
- Pre-populate a plan selector UI by fetching the catalog and surfacing the
is_defaultplan on load
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Scrapeless have an official developer API?+
What does `source_total` tell me that `total` doesn't?+
source_total is the unfiltered count of plans in the live Scrapeless catalog before any category or interval filter is applied. total reflects how many plans matched your query. Comparing the two tells you what fraction of the catalog your filters selected.