# GSMArena Phone Specs Scraper (`parsebird/gsmarena-phone-specs-scraper`) Actor

Scrape phone specifications from GSMArena by brand, search URL, or device URL. Extract OS, display, camera, RAM, battery, chipset, network, and announcement date for any phone in the GSMArena catalog. Export as JSON, CSV, or Excel.

- **URL**: https://apify.com/parsebird/gsmarena-phone-specs-scraper.md
- **Developed by:** [ParseBird](https://apify.com/parsebird) (community)
- **Categories:**
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.79 / 1,000 phone scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### GSMArena Phone Specs Scraper

Scrape phone specifications from **[GSMArena](https://www.gsmarena.com)** — the definitive phone spec database — into clean, structured JSON. The GSMArena Phone Specs Scraper pulls the OS, display, main camera, RAM and storage, battery, chipset, network bands, and announcement date for any device in the GSMArena catalog, by brand name or by pasting a GSMArena URL. No login, no GSMArena API.

<table><tr>
<td style="border-left:4px solid #D50000;padding:12px 16px;font-weight:600">
Give it a brand ("Samsung", "Apple", "Xiaomi") or a GSMArena brand / search / device URL, and get a rich spec record per phone — OS, display, camera, memory, battery, chipset, CPU, GPU, price, and release date — resolved straight from GSMArena's own device index.
</td>
</tr></table>

##### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

```
Actor: parsebird/gsmarena-phone-specs-scraper (Apify). Scrapes phone specs from gsmarena.com. Call with ApifyClient.
Input JSON fields:
  brandName: string (default "Samsung") — phone brand; mapped internally to the GSMArena brand id
  startUrl: string — a GSMArena brand URL (…-phones-9.php), search URL (results.php3?sName=…), or device URL (…-12771.php). Overrides brandName.
  results_wanted: int (default 20) — max phone records; this is the number of billed rows
  proxyConfiguration: { "useApifyProxy": true }
Output: one dataset item per phone — phone_id, maker_id, name, model_name, brand, url, image_url, search_tokens, search_flags[], aliases[], os, display_size, display_type, main_camera, ram_size, internalmemory, battery_size, announced, status, nettech, platform_chipset, platform_cpu, platform_gpu, body_dimensions, body_weight, sensors, price, _source, scraped_at.
Example: { "brandName": "Samsung", "results_wanted": 50 }
API: https://api.apify.com/v2/acts/parsebird~gsmarena-phone-specs-scraper  ·  Token: https://console.apify.com/account/integrations
```

### What does GSMArena Phone Specs Scraper do?

[GSMArena](https://www.gsmarena.com) catalogs almost every phone ever released, with a detailed specification sheet for each. There is no public GSMArena API — this GSMArena scraper reads GSMArena's own device index and comparison pages instead. It extracts:

- 📇 **Identity** — full name, model name, brand, phone and manufacturer IDs, canonical GSMArena URL, and product image.
- 🖥️ **Display** — size, area, panel type, refresh rate, brightness.
- 📸 **Camera** — main camera module (resolution, aperture, focal length).
- 🧠 **Performance** — chipset, CPU, and GPU.
- 💾 **Memory** — every RAM / storage configuration GSMArena lists.
- 🔋 **Battery** — capacity and chemistry.
- 📶 **Network** — supported cellular technologies.
- 📅 **Timeline** — announcement date and current market status.
- 🏷️ **Tokens** — the GSMArena search token string, split into feature flags and aliases.

Common uses: building a phone-comparison site or price tracker, keeping a product database in sync, market research on release cadence and specs, and feeding a chatbot with phone knowledge.

### Input parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| brandName | string | No | `Samsung` | Phone brand. Mapped internally to the correct GSMArena brand. |
| startUrl | string | No | — | A GSMArena brand, search, or device URL. Overrides `brandName`. |
| results\_wanted | integer | No | 20 | Maximum phone records to collect (billed rows). |
| proxyConfiguration | object | No | Apify Proxy | Proxy settings. GSMArena works from datacenter IPs. |

#### Example inputs

Newest Samsung phones:

```json
{ "brandName": "Samsung", "results_wanted": 50 }
```

Use a GSMArena search URL:

```json
{ "startUrl": "https://www.gsmarena.com/results.php3?sName=nokia", "results_wanted": 40 }
```

Full specs for one known model:

```json
{ "startUrl": "https://www.gsmarena.com/samsung_galaxy_s24_ultra-12771.php" }
```

Use a direct brand URL:

```json
{ "startUrl": "https://www.gsmarena.com/apple-phones-48.php", "results_wanted": 100 }
```

### What data can you extract from GSMArena?

| Field | Description |
|-------|-------------|
| phone\_id / maker\_id | GSMArena device and manufacturer IDs |
| name / model\_name / brand | Full name, catalog model name, manufacturer |
| url / image\_url | Canonical GSMArena page and product image |
| search\_tokens / search\_flags / aliases | GSMArena search token string, feature flags (5G, PHC), and alias tokens |
| os | Operating system |
| display\_size / display\_type | Screen size and panel technology |
| main\_camera | Primary camera module |
| ram\_size / internalmemory | Memory and storage configurations |
| battery\_size | Battery capacity and type |
| platform\_chipset / platform\_cpu / platform\_gpu | SoC, CPU, GPU |
| nettech | Supported network technologies |
| body\_dimensions / body\_weight | Physical size and weight |
| sensors | Onboard sensors |
| price | GSMArena's listed price(s) |
| announced / status | Announcement date and market status |
| \_source / scraped\_at | Data source label and collection timestamp |

### Output example

```json
{
  "phone_id": 12771,
  "maker_id": 9,
  "name": "Samsung Galaxy S24 Ultra",
  "model_name": "Galaxy S24 Ultra",
  "brand": "Samsung",
  "url": "https://www.gsmarena.com/samsung_galaxy_s24_ultra-12771.php",
  "image_url": "https://fdn2.gsmarena.com/vv/bigpic/samsung-galaxy-s24-ultra-5g-sm-s928-stylus.jpg",
  "search_tokens": "5G Notch PHC sgs24u sgs24ultra galaxys24ultra",
  "search_flags": ["5G", "PHC"],
  "aliases": ["Notch", "sgs24u", "sgs24ultra", "galaxys24ultra"],
  "os": "Android 14, up to 7 major OS updates, One UI 8.5",
  "display_size": "6.8 inches, 113.5 cm2",
  "display_type": "Dynamic LTPO AMOLED 2X, 120Hz, HDR10+, 2600 nits (peak)",
  "main_camera": "200 MP, f/1.7, 24mm (wide), 1/1.3\", 0.6µm, multi-directional PDAF, OIS",
  "ram_size": "256GB 12GB RAM, 512GB 12GB RAM, 1TB 12GB RAM",
  "internalmemory": "256GB 12GB RAM, 512GB 12GB RAM, 1TB 12GB RAM",
  "battery_size": "Li-Ion 5000 mAh",
  "platform_chipset": "Qualcomm SM8650-AC Snapdragon 8 Gen 3 (4 nm)",
  "nettech": "GSM / CDMA / HSPA / EVDO / LTE / 5G",
  "announced": "2024, January 17",
  "status": "Available. Released 2024, January 24",
  "_source": "GSM Arena catalog + compare endpoint",
  "scraped_at": "2026-09-02T12:00:00.000Z"
}
```

Download the dataset as **JSON, CSV, Excel, HTML, or XML** from the Storage tab or the [Apify API](https://docs.apify.com/api/v2).

### Use cases

- **Phone comparison site** — keep a full spec database in sync with GSMArena.
- **Price tracking** — pair GSMArena specs with retailer prices.
- **Market research** — analyse release cadence, chipset adoption, or battery-size trends by brand.
- **Chatbot knowledge** — feed structured phone specs to an assistant.
- **Inventory enrichment** — attach specs to SKUs by model.

### How it works

1. **Catalog** — the scraper loads GSMArena's device index (about 6,000 devices, 130 brands), which gives every phone's ID, name, image, and search tokens.
2. **Resolve** — `brandName` or the `startUrl` selects the devices to enrich.
3. **Enrich** — specs are pulled three devices per request from GSMArena's compare endpoint, with automatic pacing and session rotation.
4. Records stream to the dataset and stop at `results_wanted`.

### How much does it cost to scrape GSMArena?

This actor is **pay per result** — charged once per phone record saved.

| Plan | Price per 1,000 phones |
|------|------------------------|
| Free | **$0.99** |
| Bronze | **$0.89** |
| Silver | **$0.89** |
| Gold | **$0.79** |

A small platform **Actor start** fee also applies per run. `results_wanted` is the exact number of billed rows. Scraping 1,000 phones on the Free plan costs about **$0.99**. Apify's monthly free platform usage covers small runs.

### How to scrape GSMArena

1. Click **Try for free** and sign in to Apify.
2. Enter a **brand name** (or paste a GSMArena URL).
3. Set **results wanted** (start low, e.g. 20).
4. Click **Start**, then watch rows appear in the **Output** tab.
5. Export from **Storage**, or pull results via the API.

#### Run it via API

Python:

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("parsebird/gsmarena-phone-specs-scraper").call(run_input={
    "brandName": "Xiaomi",
    "results_wanted": 50,
})
for phone in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(phone["name"], "-", phone.get("platform_chipset"), "-", phone.get("battery_size"))
```

JavaScript:

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('parsebird/gsmarena-phone-specs-scraper').call({
    startUrl: 'https://www.gsmarena.com/apple-phones-48.php',
    results_wanted: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

Schedule recurring runs, add webhooks, or push results to Google Sheets, Slack, Zapier, and Make with [Apify integrations](https://docs.apify.com/platform/integrations).

### FAQ

**Do I need a GSMArena account or API key?**
No. The scraper reads public GSMArena pages only. GSMArena has no public specs API — this actor is the alternative.

**How current is the data?**
Live. Each run reads GSMArena at that moment. Use Apify's scheduler to keep a dataset fresh.

**How do I find a brand URL?**
Open the brand on GSMArena and copy the URL — it ends in `-phones-<id>.php` (e.g. `samsung-phones-9.php`).

**What are `search_flags` and `aliases`?**
GSMArena tags each model with a short token string used for its own search. `search_flags` are the recognised feature tokens (`5G`, `PHC`); `aliases` are the remaining nickname / model-code tokens.

**Why is a phone's spec sheet less complete than the GSMArena page?**
Unannounced or very new devices sometimes have partial specs on GSMArena itself; those rows come back with whatever GSMArena has published so far.

**Something's not working.**
Open an issue on the **Issues** tab with your input and the run link — we respond quickly.

### Is it legal to scrape GSMArena?

Scraping publicly available pages is legal in most jurisdictions, and this actor only reads spec pages any visitor can see — no login, no private data. Phone specifications are factual data. You are responsible for how you use the data — respect GSMArena's Terms of Use, and consult a lawyer if you are unsure. See Apify's guide on [the legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

### Related actors

- [Trendyol Product Scraper](https://apify.com/parsebird/trendyol-product-scraper) — product listings and prices.
- [PriceCharting Product Scraper](https://apify.com/parsebird/pricecharting-product-scraper) — video-game and collectible prices.
- [Yandex Market Scraper](https://apify.com/parsebird/yandex-market-scraper) — product data from Yandex Market.
- [Fragrantica Scraper](https://apify.com/parsebird/fragrantica-scraper) — perfume specs and notes.

Browse all [ParseBird actors](https://apify.com/parsebird) on Apify Store.

# Actor input Schema

## `brandName` (type: `string`):

Phone brand, e.g. "Samsung", "Apple", "Xiaomi", "Nothing". The actor maps it to the correct GSMArena brand.

## `startUrl` (type: `string`):

Optional GSMArena URL — a brand page (…-phones-9.php), a search URL (results.php3?sName=…), or a single device page (…-12771.php). Overrides Brand name.

## `results_wanted` (type: `integer`):

Maximum number of phone records to collect. This is the number of billed rows.

## `proxyConfiguration` (type: `object`):

GSMArena works from datacenter IPs, so the default Apify Proxy is enough.

## Actor input object example

```json
{
  "brandName": "Samsung",
  "results_wanted": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "brandName": "Samsung",
    "startUrl": "",
    "results_wanted": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("parsebird/gsmarena-phone-specs-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "brandName": "Samsung",
    "startUrl": "",
    "results_wanted": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("parsebird/gsmarena-phone-specs-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "brandName": "Samsung",
  "startUrl": "",
  "results_wanted": 20
}' |
apify call parsebird/gsmarena-phone-specs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parsebird/gsmarena-phone-specs-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/DhRphJOAZP1CbGNfD/builds/1F5CMCeGtbj1zWeVr/openapi.json
