# PlugShare Scraper (`solidcode/plugshare-scraper`) Actor

\[💰 $4 / 1K] Extract EV charging stations from PlugShare — network, plug types, power in kW, pricing, access rules, and GPS. Search by keyword, map area, or station URLs. Filter by plug type, fast chargers (50kW+), access type. Check-ins available as opt-in.

- **URL**: https://apify.com/solidcode/plugshare-scraper.md
- **Developed by:** [SolidCode](https://apify.com/solidcode) (community)
- **Categories:** Automation, Developer tools, Other
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 charging stations

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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

## PlugShare Scraper

Pull EV charging stations from PlugShare at scale — charging network, plug types, maximum power in kW, live unit availability, pricing, access rules, opening hours, amenities, and GPS coordinates, plus the driver check-in stream behind each station's score. Built for EV infrastructure analysts, fleet and route planners, charge-point operators, and market researchers who need a clean, structured charging dataset without clicking pins on a map one at a time.

### Why This Scraper?

- **22 plug types as a multi-select** — CCS1, CCS2, CHAdeMO, J-1772, Mennekes (Type 2), NACS, GB/T, GB/T Fast, NEMA 14-50, NEMA TT-30, Blue Commando, LECCS and more, all in a single run. PlugShare splits Tesla into the legacy Roadster plug and the modern NACS Supercharger plug, so this scraper does too — pick exactly the one you mean.
- **1,298 charging networks resolved by name** — every station carries its operator (EVgo, ChargePoint, Electrify America, Tesla Supercharger, Ionity, Shell Recharge…) instead of an opaque numeric code.
- **Complete map-area coverage, past PlugShare's 250-per-view ceiling** — PlugShare's map returns at most 250 stations per viewport. Give this scraper a center point and a radius and it automatically splits large areas into smaller ones and merges the results, so a dense metro doesn't silently stop at 250.
- **Driver check-ins as a separate opt-in** — comment, POSITIVE/NEGATIVE/NEUTRAL outcome, vehicle, reported charge speed in kW, connector used, wait flag, and the reported problem (Broken hardware, Blocked by vehicle, Could not activate, Cable too short…), up to 200 per station. Off by default, so station-only runs never pay for review streams.
- **Unit counts, not just a station pin** — `stationCount` reports how many charging units each site operates; on map-area searches, `availableStations` and `inUseStations` add how many were free versus occupied at collection time.
- **Real opening hours, not a blank field** — PlugShare's free-text hours field is populated on only ~12% of stations, so this scraper derives readable hours ("Open 24/7", "Mon-Fri: 05:30-22:00; Sat-Sun: 06:00-22:00") from the structured schedule instead.
- **11 amenity categories per site** — Dining, Restrooms, Lodging, Shopping, Grocery, WiFi, EV Parking, Valet Parking, Park, Hiking, and Camping, alongside parking type and parking attributes.
- **Three ways in, mixed in one run** — keyword queries, a map center plus radius in kilometers, and pasted station links (`https://www.plugshare.com/location/545097`) all in the same input.
- **Filter by who can actually charge there** — limit results to `public`, `restricted` (customer- or employee-only), or `private` (member-shared home chargers) access, so a fleet or route planner never collects a gated depot charger their drivers can't use.

### Use Cases

**EV Infrastructure & Site Selection**
- Map charger density across a metro area to find under-served corridors
- Compare fast-charger (50 kW+) coverage between two cities before committing capital
- Score candidate sites by nearby amenities — dining and restrooms drive dwell time
- Track how many stalls a competing site actually operates via `stationCount`

**Charging Network Intelligence**
- Benchmark network footprint across 1,298 operators by region
- Track the NACS transition — measure how many sites list NACS versus CCS1 over time
- Monitor `underRepair`, `comingSoon`, and `status` to see a rival network's reliability
- Compare `costDescription` and `isPaid` to position your own tariffs

**Fleet & Route Planning**
- Build a corridor charging plan filtered to CCS1 at 50 kW+ and public access
- Identify depot-adjacent chargers your drivers can actually use with `accessType`
- Feed GPS coordinates and connector data straight into routing software

**Product & Market Research**
- Mine driver check-ins for recurring failure modes by network
- Quantify sentiment with POSITIVE / NEGATIVE / NEUTRAL check-in outcomes
- Correlate PlugShare's 0–10 score with power level, network, and access type
- Track reported charge speeds in kW against a station's advertised rating

**Apps, Directories & Data Products**
- Keep an EV charging directory fresh with scheduled re-runs
- Enrich an internal asset database with photos, phone numbers, and hours
- Re-collect a known set of stations by pasting their links

### Getting Started

#### Simple Keyword Search

```json
{
  "searchQueries": ["Tesla Supercharger San Francisco"],
  "maxResults": 100
}
````

#### Every Fast Charger Around a Point

```json
{
  "latitude": 34.0522,
  "longitude": -118.2437,
  "radiusKm": 40,
  "fastChargersOnly": true,
  "accessType": "public",
  "maxResults": 300
}
```

#### Specific Plug Types Only

```json
{
  "searchQueries": ["ChargePoint Austin", "EVgo Chicago"],
  "connectorTypes": ["CCS1", "CHADEMO"],
  "maxResults": 50
}
```

#### Stations Plus Driver Check-ins

```json
{
  "latitude": 52.3676,
  "longitude": 4.9041,
  "radiusKm": 25,
  "connectorTypes": ["CCS2", "TYPE2"],
  "fastChargersOnly": true,
  "accessType": "public",
  "includeCheckIns": true,
  "maxCheckInsPerStation": 40,
  "maxResults": 200
}
```

#### Exact Stations by Link

```json
{
  "startUrls": [
    "https://www.plugshare.com/location/288701",
    "https://www.plugshare.com/location/545097"
  ],
  "includeCheckIns": true,
  "maxCheckInsPerStation": 200
}
```

### Input Reference

#### What to Collect

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `searchQueries` | array of strings | `["Tesla Supercharger San Francisco"]` | Station names, charging networks, or places to search. Each query runs separately. This is a name match, so results can include far-away stations with similar names — use the map area below for exhaustive area coverage. |
| `startUrls` | array of strings | `[]` | PlugShare station links such as `https://www.plugshare.com/location/545097`. Fetched directly, so the filters below do not apply to them. |

#### Search by Map Area

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `latitude` | number | empty | Latitude of the point to search around, e.g. `37.7749`. Both latitude and longitude must be set. |
| `longitude` | number | empty | Longitude of the point to search around, e.g. `-122.4194`. |
| `radiusKm` | integer | `50` | How far around the center point to look, in kilometers (1–500). Large areas are automatically split into smaller ones to get past PlugShare's 250-per-view limit. |

#### Filters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `connectorTypes` | array of strings | `[]` (all) | Return only stations offering at least one of these plug types. Options: `NACS`, `CCS1`, `CCS2`, `CHADEMO`, `J1772`, `TYPE2`, `TESLA_ROADSTER`, `TYPE3`, `TYPE3A`, `THREE_PHASE`, `NEMA_14_50`, `NEMA_TT_30`, `WALL_OUTLET`, `WALL_OUTLET_EURO`, `WALL_OUTLET_BS1363`, `WALL_OUTLET_3112`, `BLUE_COMMANDO`, `CARAVAN_MAINS`, `GBT`, `GBT_FAST`, `TYPE6`, `LECCS`. |
| `fastChargersOnly` | boolean | `false` | Only stations rated 50 kW and above. |
| `accessType` | string | `"any"` | Who is allowed to charge: `any`, `public`, `restricted` (customer-only, employee-only), or `private` (home and other member-shared chargers). |

#### Check-ins & Reviews

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `includeCheckIns` | boolean | `false` | Also collect what drivers said about each station. Adds a separate row per check-in. |
| `maxCheckInsPerStation` | integer | `20` | Most check-ins to collect per station, newest first (1–200). Only used when check-ins are enabled. |

#### Limits

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `maxResults` | integer | `100` | Most stations to collect in total. Check-ins do not count toward this number. |

### Output

Every row carries a `recordType` field: `station` or `checkIn`. Check-in rows link back to their station through `stationId`, `stationName`, and `stationUrl`. Fields PlugShare has no value for are omitted rather than shipped as empty nulls.

#### Charging Station (`recordType: "station"`)

```json
{
  "recordType": "station",
  "id": "545097",
  "url": "https://www.plugshare.com/location/545097",
  "name": "Safeway",
  "poiName": "Safeway",
  "address": "735 7th Ave, San Francisco, CA 94118, USA",
  "city": "San Francisco",
  "state": "CA",
  "postalCode": "94118",
  "country": "US",
  "latitude": 37.7751,
  "longitude": -122.4652,
  "network": "EVgo",
  "connectorTypes": ["CCS1", "CHAdeMO", "J-1772"],
  "kilowatts": 350,
  "isFastCharger": true,
  "stationCount": 4,
  "score": 8.7,
  "totalReviews": 214,
  "photoCount": 37,
  "photoUrl": "https://photos.plugshare.com/photos/1284937.jpg",
  "isPaid": true,
  "costDescription": "$0.36/kWh plus a $1.00 session fee",
  "accessType": "public",
  "open247": true,
  "hours": "Open 24/7",
  "parkingType": "Free",
  "parkingAttributes": ["Pull Through", "Accessible"],
  "amenities": ["Grocery", "Dining", "Restrooms", "Shopping"],
  "phone": "+1 415-555-0143",
  "description": "Four fast chargers at the north end of the Safeway lot.",
  "status": "AVAILABLE",
  "underRepair": false,
  "comingSoon": false,
  "searchQuery": "EVgo San Francisco",
  "scrapedAt": "2026-07-17T14:03:21Z"
}
```

##### Core Fields

| Field | Type | Description |
|-------|------|-------------|
| `recordType` | string | Always `"station"` for these rows |
| `id` | string | PlugShare station ID |
| `url` | string | Public PlugShare station page |
| `name` | string | Station name, falling back to the point-of-interest name or the address when PlugShare leaves it blank |
| `poiName` | string | Name of the business or place hosting the chargers |
| `searchQuery` | string | The query this station came from (absent for pasted links) |
| `scrapedAt` | string | UTC timestamp of collection (ISO-8601) |

##### Address & Location

| Field | Type | Description |
|-------|------|-------------|
| `address` | string | Full street address |
| `city` | string | City or locality |
| `state` | string | State, province, or administrative area |
| `postalCode` | string | Postal or ZIP code |
| `country` | string | Two-letter country code |
| `latitude` | number | GPS latitude |
| `longitude` | number | GPS longitude |

##### Chargers & Power

| Field | Type | Description |
|-------|------|-------------|
| `network` | string | Charging network operating the site, e.g. `"EVgo"`, `"Electrify America"` |
| `connectorTypes` | array | Plug types available, e.g. `["CCS1", "CHAdeMO", "J-1772"]` |
| `kilowatts` | number | Maximum power across every charger at the site |
| `isFastCharger` | boolean | Whether the site includes a 50 kW+ charger |
| `stationCount` | integer | Number of charging units at the site |
| `availableStations` | integer | Units free at collection time (map-area searches) |
| `inUseStations` | integer | Units occupied at collection time (map-area searches) |

##### Cost, Access & Hours

| Field | Type | Description |
|-------|------|-------------|
| `isPaid` | boolean | Whether charging costs money |
| `costDescription` | string | Free-text tariff as posted on PlugShare |
| `accessType` | string | `public`, `restricted`, or `private` |
| `open247` | boolean | Whether the site is always open |
| `hours` | string | Readable opening hours, e.g. `"Open 24/7"` or `"Mon-Fri: 05:30-22:00; Sat-Sun: 06:00-22:00"` |
| `parkingType` | string | Parking arrangement, e.g. `"Free"`, `"Paid"` |
| `parkingAttributes` | array | Parking details, e.g. `["Pull Through", "Accessible"]` |

##### Community, Amenities & Status

| Field | Type | Description |
|-------|------|-------------|
| `score` | number | PlugShare user score, 0–10 (absent when the station has no reviews) |
| `totalReviews` | integer | Number of driver check-ins PlugShare counts for the station |
| `photoCount` | integer | Number of user photos |
| `photoUrl` | string | Link to the station's primary photo |
| `amenities` | array | Nearby amenities from 11 categories, e.g. `["Dining", "Restrooms"]` |
| `phone` | string | Contact phone for the site |
| `description` | string | Access notes and directions posted by the community |
| `status` | string | Operational status reported by PlugShare, e.g. `"AVAILABLE"` |
| `underRepair` | boolean | Whether the site is flagged as under repair |
| `comingSoon` | boolean | Whether the site is announced but not yet live |

#### Driver Check-in (`recordType: "checkIn"`)

Emitted only when `includeCheckIns` is enabled.

```json
{
  "recordType": "checkIn",
  "checkInId": "8842119",
  "stationId": "545097",
  "stationName": "Safeway",
  "stationUrl": "https://www.plugshare.com/location/545097",
  "userName": "BayAreaBolt",
  "vehicle": "Chevrolet Bolt EV",
  "rating": "POSITIVE",
  "comment": "Pulled 148 kW right away. Two of the four stalls were free at 7pm.",
  "checkedInAt": "2026-07-14T18:22:11Z",
  "kilowatts": 148,
  "connectorType": "CCS1",
  "waiting": false,
  "problem": "Blocked by vehicle",
  "scrapedAt": "2026-07-17T14:03:24Z"
}
```

| Field | Type | Description |
|-------|------|-------------|
| `recordType` | string | Always `"checkIn"` for these rows |
| `checkInId` | string | Unique check-in ID |
| `stationId` | string | ID of the station this check-in belongs to |
| `stationName` | string | Name of that station |
| `stationUrl` | string | Public PlugShare page for that station |
| `userName` | string | Public display name of the driver |
| `vehicle` | string | Vehicle the driver charged, e.g. `"Chevrolet Bolt EV"` |
| `rating` | string | Outcome: `POSITIVE`, `NEGATIVE`, or `NEUTRAL` |
| `comment` | string | What the driver wrote |
| `checkedInAt` | string | When the driver checked in (ISO-8601 UTC) |
| `kilowatts` | number | Charge speed the driver actually reported |
| `connectorType` | string | Plug the driver used |
| `waiting` | boolean | Whether the driver had to queue |
| `problem` | string | Reported issue: `Broken hardware`, `In use`, `Blocked by vehicle`, `Could not activate`, `Permanently closed`, or `Cable too short`. Absent when nothing went wrong. |
| `scrapedAt` | string | UTC timestamp of collection (ISO-8601) |

### Tips for Best Results

- **Use the map area, not a keyword, when you want everything in a region.** Keyword search matches station names globally — a query biased toward Los Angeles can still surface a similarly-named station thousands of kilometers away. Latitude, longitude, and radius are the precise tool.
- **Keep `maxCheckInsPerStation` at 50 or below for the cheapest deep dives.** PlugShare hands over the 50 most recent check-ins together with the station itself; asking for more than 50 makes the run work harder for each extra one.
- **Plug-type filters are inclusive, not exclusive.** A station matching `CCS1` will usually list `J-1772` too, because most fast-charging sites also carry a slow AC plug. Filter on what must be present, then narrow further on `connectorTypes` in your own analysis.
- **Pick NACS, not Tesla Roadster, for Superchargers.** PlugShare keeps the legacy Roadster plug and the modern NACS Supercharger plug as separate types — choosing the wrong one returns almost nothing.
- **Prefer `open247` and `hours` over assumptions.** Roughly nine in ten stations have no free-text hours posted, so `hours` is built from the structured schedule instead — it is the reliable field to read.
- **`score` is absent for most stations, and that is normal.** Around two-thirds of PlugShare sites have never been reviewed. Use `totalReviews` to tell "badly rated" apart from "never rated".
- **For exhaustive coverage of an extremely dense downtown, run a few smaller radii instead of one huge one.** The run log tells you when an area was busy enough that a tighter radius would collect more.

### Pricing

**From $4.00 per 1,000 stations** — undercutting the $5.00 per 1,000 charged by the leading alternative. You pay per result, with no compute or time-based charges (just a small fixed per-run start fee). Apify's loyalty-tier discounts apply automatically:

| Stations collected | No discount | Bronze | Silver | Gold |
|--------------------|-------------|--------|--------|------|
| 100 | $0.48 | $0.45 | $0.43 | $0.40 |
| 1,000 | $4.80 | $4.50 | $4.30 | $4.00 |
| 10,000 | $48.00 | $45.00 | $43.00 | $40.00 |
| 100,000 | $480.00 | $450.00 | $430.00 | $400.00 |

Driver check-ins are opt-in and priced separately at **$0.40 per 1,000** at the Gold tier (down from $0.48 with no discount) — so a station-only run is never charged for review streams. For example, 1,000 stations plus roughly 20 check-ins each (20,000 check-ins) works out to about $4.00 + $8.00 = **$12.00** at Gold.

A "station" is one charging site with its full field set; a "check-in" is one driver review row. Platform usage fees are additional.

### Integrations

Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:

- **Zapier** / **Make** / **n8n** — Workflow automation
- **Google Sheets** — Direct spreadsheet export
- **Slack** / **Email** — Notifications on new results
- **Webhooks** — Trigger custom APIs on run completion
- **Apify API** — Full programmatic access

### Legal & Ethical Use

This scraper collects publicly available information from PlugShare's charging station directory. Driver check-ins are limited to the public display name, the comment, and the charging details the driver chose to publish — no private contact details are ever collected. Use the data responsibly: respect PlugShare's terms of service, honor applicable data-protection laws including GDPR and CCPA when handling anything that could identify a person, and do not republish user-written comments in ways their authors would not expect. You are responsible for how you use the data you collect.

# Actor input Schema

## `searchQueries` (type: `array`):

What to search for on PlugShare — a station name, a charging network, or a place. For example 'Tesla Supercharger San Francisco' or 'ChargePoint Austin'. Each query is searched separately. Note that this is a name match rather than a map search: results are ordered by distance from your map center (if you set one) but can include far-away stations with similar names. A single very broad query has a search-depth limit (the run log tells you if one was reached) — to collect everything in a specific area, use 'Search by Map Area' below instead.

## `startUrls` (type: `array`):

Paste PlugShare station page links (like https://www.plugshare.com/location/545097) to pull those exact stations. Handy when you already know which stations you want. Pasted links are fetched directly, so the filters below don't apply to them.

## `latitude` (type: `number`):

Latitude of the point to search around, for example 37.7749 for San Francisco. Leave empty unless you want to search a specific map area. Both latitude and longitude must be set for this to work.

## `longitude` (type: `number`):

Longitude of the point to search around, for example -122.4194 for San Francisco.

## `radiusKm` (type: `integer`):

How far around the center point to look, in kilometers. Only used when a center latitude and longitude are set. PlugShare returns at most 250 stations per map area, so this scraper automatically splits a large area into smaller tiles to get past that limit. In an extremely dense city a very large radius can still miss some stations — for exhaustive coverage, use a smaller radius over the area you care about (the run log tells you if this happened).

## `connectorTypes` (type: `array`):

Only return stations that offer at least one of these plug types. Leave empty to include every plug type. Note that a matching station will often list other plug types too — most sites with a CCS1 plug also have a J-1772 one.

## `fastChargersOnly` (type: `boolean`):

Only return charging stations rated 50 kW and above — the ones that charge a car in minutes rather than hours. A matching station may still list some slower plugs alongside its fast ones.

## `accessType` (type: `string`):

Limit results by who is allowed to charge there. 'Public' means anyone can use it; 'restricted' covers customer-only, employee-only and similar limited access; 'private' covers home and other private chargers that PlugShare members have shared.

## `includeCheckIns` (type: `boolean`):

Also collect what drivers said about each station — comment, rating, vehicle, charge speed, and date. This adds a separate row for every check-in, so your result count (and cost) will be much higher. Leave this off if you only want station facts.

## `maxCheckInsPerStation` (type: `integer`):

The most check-ins to collect from any single station, newest first. Stations with more check-ins than this are cut off at this number, and stations with fewer simply return what they have. Only used when 'Include Check-ins & Reviews' is turned on.

## `maxResults` (type: `integer`):

The most stations to collect in total across everything you searched for. Check-ins do not count toward this number. Set this to 0 to collect as many as can be found, up to a 50,000 safety limit per run.

## Actor input object example

```json
{
  "searchQueries": [
    "Tesla Supercharger San Francisco"
  ],
  "startUrls": [],
  "radiusKm": 50,
  "connectorTypes": [],
  "accessType": "any",
  "maxCheckInsPerStation": 20,
  "maxResults": 100
}
```

# Actor output Schema

## `overview` (type: `string`):

Every record from the run in one place — charging stations and driver check-ins — distinguished by `recordType`.

## `stations` (type: `string`):

Charging stations only, with name, network, plug types, power, fast-charger flag, score, availability, city/state, and PlugShare URL.

## `checkIns` (type: `string`):

Individual driver check-ins only, each linked to its station — driver, vehicle, rating, comment, reported charge speed, and date. Present only when 'Include Check-ins & Reviews' is enabled.

# 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 = {
    "searchQueries": [
        "Tesla Supercharger San Francisco"
    ],
    "startUrls": [],
    "radiusKm": 50,
    "connectorTypes": [],
    "fastChargersOnly": false,
    "accessType": "any",
    "includeCheckIns": false,
    "maxCheckInsPerStation": 20,
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("solidcode/plugshare-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 = {
    "searchQueries": ["Tesla Supercharger San Francisco"],
    "startUrls": [],
    "radiusKm": 50,
    "connectorTypes": [],
    "fastChargersOnly": False,
    "accessType": "any",
    "includeCheckIns": False,
    "maxCheckInsPerStation": 20,
    "maxResults": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("solidcode/plugshare-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 '{
  "searchQueries": [
    "Tesla Supercharger San Francisco"
  ],
  "startUrls": [],
  "radiusKm": 50,
  "connectorTypes": [],
  "fastChargersOnly": false,
  "accessType": "any",
  "includeCheckIns": false,
  "maxCheckInsPerStation": 20,
  "maxResults": 100
}' |
apify call solidcode/plugshare-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "PlugShare Scraper",
        "description": "[💰 $4 / 1K] Extract EV charging stations from PlugShare — network, plug types, power in kW, pricing, access rules, and GPS. Search by keyword, map area, or station URLs. Filter by plug type, fast chargers (50kW+), access type. Check-ins available as opt-in.",
        "version": "1.0",
        "x-build-id": "sqF7rgRfb7m3cuIVn"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/solidcode~plugshare-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-solidcode-plugshare-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/solidcode~plugshare-scraper/runs": {
            "post": {
                "operationId": "runs-sync-solidcode-plugshare-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/solidcode~plugshare-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-solidcode-plugshare-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchQueries": {
                        "title": "Search Queries",
                        "type": "array",
                        "description": "What to search for on PlugShare — a station name, a charging network, or a place. For example 'Tesla Supercharger San Francisco' or 'ChargePoint Austin'. Each query is searched separately. Note that this is a name match rather than a map search: results are ordered by distance from your map center (if you set one) but can include far-away stations with similar names. A single very broad query has a search-depth limit (the run log tells you if one was reached) — to collect everything in a specific area, use 'Search by Map Area' below instead.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "Station URLs",
                        "type": "array",
                        "description": "Paste PlugShare station page links (like https://www.plugshare.com/location/545097) to pull those exact stations. Handy when you already know which stations you want. Pasted links are fetched directly, so the filters below don't apply to them.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "latitude": {
                        "title": "Center Latitude",
                        "minimum": -90,
                        "maximum": 90,
                        "type": "number",
                        "description": "Latitude of the point to search around, for example 37.7749 for San Francisco. Leave empty unless you want to search a specific map area. Both latitude and longitude must be set for this to work."
                    },
                    "longitude": {
                        "title": "Center Longitude",
                        "minimum": -180,
                        "maximum": 180,
                        "type": "number",
                        "description": "Longitude of the point to search around, for example -122.4194 for San Francisco."
                    },
                    "radiusKm": {
                        "title": "Search Radius (km)",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "How far around the center point to look, in kilometers. Only used when a center latitude and longitude are set. PlugShare returns at most 250 stations per map area, so this scraper automatically splits a large area into smaller tiles to get past that limit. In an extremely dense city a very large radius can still miss some stations — for exhaustive coverage, use a smaller radius over the area you care about (the run log tells you if this happened)."
                    },
                    "connectorTypes": {
                        "title": "Plug Types",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Only return stations that offer at least one of these plug types. Leave empty to include every plug type. Note that a matching station will often list other plug types too — most sites with a CCS1 plug also have a J-1772 one.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "NACS",
                                "CCS1",
                                "CCS2",
                                "CHADEMO",
                                "J1772",
                                "TYPE2",
                                "TESLA_ROADSTER",
                                "TYPE3",
                                "TYPE3A",
                                "THREE_PHASE",
                                "NEMA_14_50",
                                "NEMA_TT_30",
                                "WALL_OUTLET",
                                "WALL_OUTLET_EURO",
                                "WALL_OUTLET_BS1363",
                                "WALL_OUTLET_3112",
                                "BLUE_COMMANDO",
                                "CARAVAN_MAINS",
                                "GBT",
                                "GBT_FAST",
                                "TYPE6",
                                "LECCS"
                            ],
                            "enumTitles": [
                                "NACS (Tesla) — Tesla Supercharger plug",
                                "CCS1 — fast charging, North America",
                                "CCS2 — fast charging, Europe",
                                "Quick Charge (CHAdeMO) — fast charging",
                                "J-1772 — standard AC, North America",
                                "Mennekes (Type 2) — standard AC, Europe",
                                "Tesla (Roadster) — legacy Tesla plug",
                                "EV Plug (Type 3)",
                                "Type 3A",
                                "Three Phase",
                                "NEMA 14-50",
                                "NEMA TT-30",
                                "Wall Outlet",
                                "Wall Outlet (Euro)",
                                "Wall Outlet (BS1363)",
                                "Wall Outlet (3112)",
                                "Blue Commando",
                                "Caravan Mains Socket",
                                "GB/T",
                                "GB/T (Fast)",
                                "Type 6",
                                "LECCS"
                            ]
                        }
                    },
                    "fastChargersOnly": {
                        "title": "Fast Chargers Only",
                        "type": "boolean",
                        "description": "Only return charging stations rated 50 kW and above — the ones that charge a car in minutes rather than hours. A matching station may still list some slower plugs alongside its fast ones."
                    },
                    "accessType": {
                        "title": "Who Can Use It",
                        "enum": [
                            "any",
                            "public",
                            "restricted",
                            "private"
                        ],
                        "type": "string",
                        "description": "Limit results by who is allowed to charge there. 'Public' means anyone can use it; 'restricted' covers customer-only, employee-only and similar limited access; 'private' covers home and other private chargers that PlugShare members have shared."
                    },
                    "includeCheckIns": {
                        "title": "Include Check-ins & Reviews",
                        "type": "boolean",
                        "description": "Also collect what drivers said about each station — comment, rating, vehicle, charge speed, and date. This adds a separate row for every check-in, so your result count (and cost) will be much higher. Leave this off if you only want station facts."
                    },
                    "maxCheckInsPerStation": {
                        "title": "Max Check-ins per Station",
                        "minimum": 1,
                        "maximum": 200,
                        "type": "integer",
                        "description": "The most check-ins to collect from any single station, newest first. Stations with more check-ins than this are cut off at this number, and stations with fewer simply return what they have. Only used when 'Include Check-ins & Reviews' is turned on."
                    },
                    "maxResults": {
                        "title": "Maximum Stations",
                        "minimum": 1,
                        "type": "integer",
                        "description": "The most stations to collect in total across everything you searched for. Check-ins do not count toward this number. Set this to 0 to collect as many as can be found, up to a 50,000 safety limit per run."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
