# PhoneMore Scraper (`rl1987/phonemore-scraper`) Actor

Scrapes phone, tablet, and smartwatch specs from phonemore.com, with search/filter support (brand, device type, network, screen size, storage, RAM, battery, camera, features).

- **URL**: https://apify.com/rl1987/phonemore-scraper.md
- **Developed by:** [R.L.](https://apify.com/rl1987) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 device records

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#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

## PhoneMore Scraper

### What does PhoneMore Scraper do?

PhoneMore Scraper extracts full technical specifications for phones, tablets, and smartwatches from [phonemore.com](https://www.phonemore.com/phones) - display, chipset, RAM/storage, camera, battery, connectivity, sensors, and every other field the site publishes for a given model/variant. Point it at a brand, a keyword, or a set of hardware filters and it returns one structured record per device variant (e.g. each storage/color SKU of a phone gets its own row). Runs on the Apify platform, so you get scheduling, an API, dataset export in JSON/CSV/Excel, and proxy rotation out of the box.

Built with [Scrapy](https://scrapy.org/) on top of the [Apify SDK for Python](https://docs.apify.com/sdk/python/).

### Why use PhoneMore Scraper?

- **Market research** - track spec trends (battery, camera MP, RAM) across brands and years.
- **Comparison tools / affiliate sites** - power a phone-comparison feature with structured spec data instead of hand-maintained tables.
- **Price/spec datasets for ML** - build training data correlating specs with device tier or price.
- **Competitive tracking** - watch when a brand releases a new model or variant.

### How to use PhoneMore Scraper

1. Open the Actor's **Input** tab.
2. Optionally set a `keyword`, one or more `brands`, a `deviceType`, and any hardware filters (screen size, storage, RAM, battery, camera, features, network).
3. Set `maxItems` (and optionally `maxPages`) to bound how much it scrapes.
4. Click **Start** and wait for the run to finish.
5. Open the **Dataset** tab to view, download, or query the results via the Apify API.

### Input

All fields are optional - an empty input scrapes the first page of all phones.

| Field | Type | Description |
|---|---|---|
| `scrapeAll` | boolean | Ignore every filter below and crawl the unfiltered listing for all device types. `maxItems`/`maxPages` still bound the run. |
| `keyword` | string | Free-text search, e.g. `"galaxy s25"`. |
| `brands` | array | Restrict to these brands (e.g. `["Samsung", "Apple"]`). |
| `deviceType` | enum | `phone` (default), `tablet`, or `smartwatch`. |
| `network` | enum | Minimum network generation: `2G`…`5G`. |
| `features` | array | Required features: `nfc`, `gps`, `waterproof`, `scratch_resistant`, `gorilla_glass`, `infrared`, `qwerty_keyboard`, `radio`, `tv`, `dlna`. |
| `minScreenInches`, `minStorageGB`, `minRamGB`, `minBatteryMah`, `minMegapixel`, `minCameraLenses`, `minSimCards`, `minProcessorCores` | integer | Minimum-value hardware filters. |
| `maxItems` | integer | Max device detail pages to scrape (default 200). |
| `maxPages` | integer | Max listing pages to paginate through (20 devices/page). |
| `proxyConfiguration` | object | Proxy settings (Apify Proxy on by default). |

### Output

Each dataset item is one device variant, with convenience fields plus the full raw spec table:

```json
{
  "url": "https://www.phonemore.com/specs/samsung/galaxy-s25-edge/sm-s937w-512gb/",
  "brand": "Samsung",
  "family": "galaxy-s25-edge",
  "model": "Galaxy S25 Edge (SM-S937W 512GB)",
  "release_date": "5/29/2025, Announced: 5/13/2025",
  "screen_size": "6.7\" inches",
  "os": "Android 15",
  "chipset": "64bit: Qualcomm Snapdragon 8 Elite (SM8750-AC) (3nm)",
  "ram": "12GB LPDDR5X",
  "storage": "512GB (476GB available)UFS 4.0",
  "battery_capacity": "3900 mAh",
  "specs": { "...": "every spec table row, snake_case keys" }
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel. The Dataset tab also offers two preset views: **Overview** (key spec columns) and **Full specs** (adds the raw per-device spec object).

#### Data table

| Field | Description |
|---|---|
| `url`, `path` | Detail page URL / path. |
| `brand`, `family`, `model` | Brand, model line, and full variant name. |
| `release_date` | Announcement/release date string. |
| `screen_size`, `display_type`, `resolution` | Display specs. |
| `os`, `chipset`, `cpu` | Platform specs. |
| `ram`, `storage` | Memory specs. |
| `network_technology`, `sim` | Connectivity specs. |
| `camera_main`, `camera_front` | Camera specs. |
| `battery_capacity`, `weight`, `dimensions` | Physical specs. |
| `specs` | Full spec table as scraped (85-100+ fields depending on device). |

### Pricing / cost estimation

PhoneMore Scraper uses **pay-per-event** pricing: **$1 per 1000 device records** ($0.001/item) returned in the dataset, charged as each item is scraped. Underlying Apify platform usage (compute, proxy) is billed on top of that, same as any pay-per-event Actor - it's a lightweight HTTP-only crawl (no browser), so that usage cost is small. Set your run's max charge (or use `maxItems`/`maxPages`) to cap spend; the run stops automatically once the charge limit is hit, so you never pay for more than you asked for.

Example: a 5,000-item run (`scrapeAll: true` with a generous `maxItems`) costs $5.

### Tips

- Narrow with `keyword` or `brands` + hardware filters before raising `maxItems` - fewer irrelevant listing pages to paginate through before hitting your item cap.
- Use `maxPages` if you only care about the newest devices (listings are sorted by release by default).
- Use `scrapeAll` for a full, unfiltered crawl across phones/tablets/smartwatches - set `maxItems` high enough for the size of dataset you're paying for.

### FAQ, disclaimers, and support

This Actor scrapes publicly available specification pages. Use responsibly and in line with phonemore.com's terms of service. Site markup can change; if the Actor stops returning expected fields, please report it via the Issues tab.

# Actor input Schema

## `scrapeAll` (type: `boolean`):

When enabled, ignores keyword/brands/deviceType/network/features/hardware filters and crawls the unfiltered listing for phones, tablets, and smartwatches. Max items / Max listing pages still apply as run-size limits.

## `keyword` (type: `string`):

Free-text search matched against device name/model (e.g. "galaxy s25", "iphone 17 pro").

## `brands` (type: `array`):

Restrict results to these brands. Leave empty for all brands.

## `deviceType` (type: `string`):

Type of device to search for.

## `network` (type: `string`):

Minimum supported network generation.

## `features` (type: `array`):

Only include devices supporting all selected features.

## `minScreenInches` (type: `integer`):

e.g. 6 for 6" or more.

## `minStorageGB` (type: `integer`):

e.g. 128 for 128GB or more.

## `minRamGB` (type: `integer`):

e.g. 8 for 8GB RAM or more.

## `minBatteryMah` (type: `integer`):

e.g. 5000 for 5000 mAh or more.

## `minMegapixel` (type: `integer`):

e.g. 48 for 48MP or more.

## `minCameraLenses` (type: `integer`):

e.g. 2 for dual camera or more.

## `minSimCards` (type: `integer`):

e.g. 2 for Dual-SIM or more.

## `minProcessorCores` (type: `integer`):

e.g. 8 for Octa-Core or more.

## `maxItems` (type: `integer`):

Maximum number of device detail pages to scrape. Leave blank for a default of 200 - unless Scrape all data is enabled, in which case leaving it blank means unlimited (crawls the full catalog).

## `maxPages` (type: `integer`):

Maximum number of paginated listing pages to crawl (20 devices/page). Leave empty for no limit (bounded only by Max items).

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

Specifies proxy servers that will be used by the scraper in order to hide its origin.

## Actor input object example

```json
{
  "scrapeAll": false,
  "brands": [],
  "deviceType": "phone",
  "features": [],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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 = {
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("rl1987/phonemore-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 = { "proxyConfiguration": { "useApifyProxy": True } }

# Run the Actor and wait for it to finish
run = client.actor("rl1987/phonemore-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call rl1987/phonemore-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=rl1987/phonemore-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/Kd9UE3BKlIT9BxwG1/builds/dY8cwSAG3Cjs8FdZ7/openapi.json
