GSMArena APIgsmarena.com ↗
Access GSMArena phone specs, brand listings, search, pricing, and user reviews via a structured API. 4 endpoints returning normalized smartphone data.
What is the GSMArena API?
The GSMArena API gives developers structured access to smartphone data across 4 endpoints, covering brand listings, per-brand device catalogs, keyword search, and full device specifications. The get_phone endpoint alone returns over a dozen normalized fields — including display size and refresh rate, chipset details, battery capacity with charging wattage, camera specs, pricing in multiple currencies, and user reviews — making it straightforward to build comparison tools or populate product databases without parsing spec tables manually.
No input parameters required.
curl -X GET 'https://api.parse.bot/scraper/0449e854-6b54-4825-8567-f8f7678c893c/list_brands' \ -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 gsmarena-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: GSMArena SDK — bounded, re-runnable; every call capped."""
from parse_apis.GSMArena_Phone_Data_API import GSMArena, Brand, PhoneSummary, Phone, PhoneNotFound
gsmarena = GSMArena()
# List all brands, show top 5 by device count
for brand in gsmarena.brands.list(limit=5):
print(brand.name, brand.device_count, brand.url)
# Search for phones across all brands
result = gsmarena.phone_summaries.search(query="Galaxy S24", limit=3).first()
if result:
print(result.name, result.url)
# Drill into full specs from a search result
details = result.details()
print(details.name, details.release_date)
print(details.platform.chipset, details.platform.core_count)
print(details.display.type, details.battery.charging_raw)
for price in details.pricing[:3]:
print(price.currency, price.value)
# Navigate brand -> phones via sub-resource
samsung = Brand(_api=gsmarena, brand_id="9", url="samsung-phones-9.php", name="Samsung", device_count=980)
for phone in samsung.phones.list(limit=3):
print(phone.name, phone.url, phone.image)
# Typed error handling for a non-existent phone
try:
bad = gsmarena.phone_summaries.search(query="nonexistent_xyz_000", limit=1).first()
if bad:
bad.details()
except PhoneNotFound as exc:
print(f"Phone not found: {exc.phone_url}")
print("exercised: brands.list / phone_summaries.search / details / brand.phones.list / PhoneNotFound")
Get all mobile phone brands available on GSMArena. Each brand includes its name, URL, internal ID, and total device count. The full list is returned in a single page.
No input parameters required.
{
"type": "object",
"fields": {
"brands": "array of brand objects with name, url, brand_id, and device_count"
},
"sample": {
"data": {
"brands": [
{
"url": "https://www.gsmarena.com/samsung-phones-9.php",
"name": "Samsung",
"brand_id": "9",
"device_count": 980
},
{
"url": "https://www.gsmarena.com/apple-phones-48.php",
"name": "Apple",
"brand_id": "48",
"device_count": 120
}
]
},
"status": "success"
}
}About the GSMArena API
Browse Brands and Device Catalogs
The list_brands endpoint returns every brand available on GSMArena as a structured array. Each entry includes name, url, brand_id, and device_count, so you can see at a glance how many devices a brand has listed. Pass a brand's brand_url value (e.g. samsung-phones-9.php) to list_phones to get paginated results for that brand. The response includes total_pages and current_page so you can walk through large catalogs — Samsung alone spans dozens of pages.
Search and Retrieve Device Specs
The search_phones endpoint accepts a query string such as iPhone 16 Pro or Pixel 9 and returns matching devices with names, URLs, and thumbnail images. Once you have a phone's URL from either list_phones or search_phones, pass it to get_phone to retrieve the full specification set. The response includes a raw object with all original spec table data, plus structured sub-objects for display (size, area, refresh rate, type, resolution), platform (chipset, CPU brand, process node in nm, core count, cluster layout), battery (capacity, charging wattage, type), memory (internal storage variants), and camera (main and selfie sub-objects).
Pricing and User Reviews
The get_phone response includes a pricing array where each entry carries a currency and value, reflecting the prices listed on the device's GSMArena page. The reviews array contains user-submitted reviews with author, date, and content fields. These are particularly useful for sentiment analysis or sourcing real-world user feedback alongside objective hardware specs.
The GSMArena API is a managed, monitored endpoint for gsmarena.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when gsmarena.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 gsmarena.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 phone comparison tool using normalized
display,platform, andbatteryfields fromget_phone - Populate a product database with full spec sheets by iterating
list_brands→list_phones→get_phone - Track multi-currency pricing across devices using the
pricingarray returned byget_phone - Power a natural-language phone search feature using the
search_phonesendpoint with keyword queries - Analyze user sentiment by processing the
reviewsarray fromget_phoneacross a category of devices - Generate chipset or SoC comparison datasets using
platformfields likechipset,cpu_brand, andprocess_nm - Monitor device catalog size changes per brand using
device_countfromlist_brands
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does GSMArena have an official developer API?+
What does the `get_phone` endpoint return beyond basic specs?+
get_phone returns a pricing array with currency and value pairs, a reviews array with author, date, and review content, and a raw object containing all original spec table data as nested key-value pairs. The structured sub-objects for display, platform, battery, memory, and camera normalize the most-queried fields so you don't need to parse raw for common lookups.Does the API return historical price data or price trends?+
pricing array in get_phone reflects prices as currently listed on the device's GSMArena page — it is a point-in-time snapshot, not a price history. You can fork this API on Parse and revise it to store and compare pricing data over time by adding a persistence layer or scheduled polling endpoint.How does pagination work for `list_phones`?+
list_phones endpoint accepts an optional page integer alongside the required brand_url. The response always includes total_pages and current_page, so you can iterate from page 1 through total_pages to retrieve a brand's full device catalog. There is no bulk-fetch option that returns all pages in a single call.